我明白这是一个简单的问题。谁能解释下面的“如果”是做什么的。
让我们假设 id = 0;
private bool item;
if (item = ((id & 12) == 12))
ret = 1;
(id & 12)
的计算结果是否为(0+12)
?如果是,12 == 12
变为 true。- 这是否检查
item
是否等于 true?
最佳答案
&
是按位 and 运算符。它只保留那些在两个操作数中都为 1 的位。
0 & 0 == 0
0 & 1 == 0
1 & 0 == 0
1 & 1 == 1
二进制中的 12 是 1100
,二进制中的 0 是 0000
,所以 0 & 12 == 0
。
哪个输入给你 12?好吧,任何设置了位 2 和位 3 的输入,例如 1111
(15, 0xF)、1101
(13, 0xD)、1110
(14, 0xE),当然还有 1100
(12, 0xC) 本身。但许多其他输入也是可能的,例如11100
(28, 0x1C) 或 11101
(29, 0x1D)。
用十六进制表示法编写更紧凑,更容易查看输入是否匹配。十六进制的 12 是 0xC
。任何其他在最低有效位置带有 C
、D
、E
或 F
的十六进制数都将满足您的条件.
请注意,0101
(5) 等输入将无法通过测试,因为 0101 & 1100 == 0100
(5 & 12 == 4)。
item
被赋值为按位 and 的结果,然后将此结果用作 if
语句的条件。
关于c# - (id & 12) 评估什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74647104/