代码条件判断语句if (c >> a & 1)的具体含义是什么?
结论
你说的等价关系不成立,(c >> a) & 1 的作用是提取变量c二进制表示中第a位的数值(最低位为第0位),判断该位是否为1,和c >> a整体等于1完全是两个逻辑。
运算逻辑拆解
按位运算的优先级已经确认c >> a & 1和(c >> a) & 1完全等价,运算分两步走:
- 先执行
c >> a:将c的二进制值整体向右移动a位,原本在第a位的比特会被移动到最低位(第0位)的位置,更高位的内容直接丢弃。 - 再执行
& 1:和数值1做按位与运算,1的二进制只有最低位是1、其余位都是0,运算后只会保留移到最低位的那个比特值,其余位全部清零,最终结果只能是0或者1,刚好对应c第a位的原始值。
示例验证
拿c = 22(二进制为10110)举例:
- 当
a=2时:c >> 2得到二进制101(十进制5),和1按位与得到1,对应c的第2位确实是1,条件成立。这里c >> a的值是5不等于1,但整个表达式结果为真,也能证明你之前的等价猜测是错的。 - 当
a=3时:c >> 3得到二进制10(十进制2),和1按位与得到0,对应c的第3位是0,条件不成立。
内容的提问来源于stack exchange,提问作者Abrar
相关产品推荐
相关产品推荐

