【问题标题】:How to remove a bit from an int? [duplicate]如何从 int 中删除一点? [复制]
【发布时间】:2016-07-31 17:33:39
【问题描述】:

我有以下代码:

    private enum Wall
    {
        Up = 0x0001,
        Down = 0x0010,
        Left = 0x0100,
        Right = 0x1000,
    }

private void Test()
{
    int walls = 0x1111;
    var wallsWithRightWallRemoved = walls | Wall.Right;
    // wallsWithRightWallRemoved  should now be this: 0x0111    
}

我有一个名为墙壁的变量,其中 0x1111 基本上代表 4 个布尔值。从墙上我想删除右墙,所以我从中减去它 (walls | Wall.Right;) ,但我得到“无法将运算符 & 应用于 int 类型的操作数”。 基本上我想得到一个包含 0x0111 的变量。

谢谢

【问题讨论】:

  • | 是按位或,而不是减法。您是在添加右墙,而不是移除它。
  • 我认为你的部分错误是你的枚举丢失了[Flags]
  • @Askerman “一个奇怪的 int 相关错误” 无法回答。请阅读How to Ask 并提供minimal reproducible example
  • @Askerman 可以将其强制转换int,但它不是int。例如,int right = Wall.Right 不会编译;你需要投射它。 ~ 是按位补码运算符,它会翻转位,因此您可以与 0111 进行与运算,这将取消设置第四位。

标签: c#


【解决方案1】:
wallsWithRightWallRemoved = walls & 0x0111;

或者将设置其中任何一个中的位。并且将取消设置其中任何一个为 0 的位,这是您想要做的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-28
    • 2017-11-15
    • 1970-01-01
    • 2020-08-27
    • 1970-01-01
    相关资源
    最近更新 更多