关于(id & 12)计算及对应if语句逻辑的技术咨询
关于这段if语句的逻辑解释
先把代码里的关键运算符和执行顺序理清楚:
private bool item; if (item = ((id & 12) == 12)) ret = 1;
逐个解答你的疑问:
疑问1:
(id & 12)的计算结果是否等于(0+12)?
完全不是。这里的&是按位与运算符,不是加法。计算规则是把两个数转换成二进制后,对应位都为1时结果为1,否则为0。
当id=0时,0的二进制是0000,12的二进制是1100,按位与后每一位都是0,结果是0,所以0 == 12的结果是false,并非你猜想的true。疑问2:该语句是否是在检查
item是否等于true?
不是。这里的=是赋值运算符,不是比较用的==。整个表达式的执行顺序是:
- 先计算
(id & 12) == 12,得到一个布尔值(true或false) - 把这个布尔值赋值给变量
item - if语句判断的是赋值后的item的值,如果为true,就执行
ret = 1
换个写法你会更清楚,这行代码等价于:
item = ((id & 12) == 12); if (item) ret = 1;
内容的提问来源于stack exchange,提问作者Sarahrb
相关产品推荐
相关产品推荐

