[英]What does (id & 12) evaluate to?
我明白这是一个简单的问题。 谁能解释下面的“如果”是做什么的。 假设id = 0;
private bool item;
if (item = ((id & 12) == 12))
ret = 1;
(id & 12)
是否评估为(0+12)
? 如果是,则12 == 12
变为真。item
是否等于 true? &
是按位与运算符。 它只保留那些在两个操作数中都为 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
最低有效位 position 的十六进制数都将满足您的条件。
请注意,诸如0101
(5) 之类的输入将无法通过测试,因为0101 & 1100 == 0100
(5 & 12 == 4)。
item
被分配了按位和的结果,然后这个结果被用作你的if
语句的条件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.