【发布时间】: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#