我明白这是一个简单的问题.谁能解释一下下面的"如果"是什么意思?
让我们假设id = 0;
private bool item;
if (item = ((id & 12) == 12))
ret = 1;
-
(id & 12)
等于(0+12)
吗?如果是,则12 == 12
变为真. - 这是否判断
item
是否等于TRUE?
我明白这是一个简单的问题.谁能解释一下下面的"如果"是什么意思?
让我们假设id = 0;
private bool item;
if (item = ((id & 12) == 12))
ret = 1;
(id & 12)
等于(0+12)
吗?如果是,则12 == 12
变为真.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
的十六进制数都将满足您的条件.
请注意,诸如0
(5)之类的输入将无法通过测试,因为0101 & 1100 == 0100
0101 & 1100 == 0100
(5&;12==4).
将按位AND的结果赋给item
,然后将该结果用作if
语句的条件.