位运算(移位返回值):移位操作返回值判定及代码示例咨询
位运算问题解答
一、if (((number >> i) & 1) == 1) 的返回值确定逻辑
这段代码核心是判断数字number的第i位(从0开始计数,最低位为第0位)是否为1,返回值为布尔类型(true或false),具体逻辑分三步:
number >> i:将number的二进制位整体向右移动i位,原本的第i位会被移到最低位(第0位)的位置。& 1:把右移后的结果与二进制1做按位与运算。由于1的二进制只有最低位是1,其余位都是0,运算后只会保留右移结果的最低位值——要么是0,要么是1。== 1:判断上述结果是否等于1。如果等于,说明原number的第i位是1,条件成立返回true;否则返回false。
二、左移(<<)和右移(>>)的返回值说明
左移操作(x << n)
把x的二进制所有位向左移动n位,右侧空出的位补0:
- 对无符号数或未溢出的有符号数,结果等价于
x * (2^n)。比如5 << 2,5的二进制是101,左移2位后是10100(即20),正好是5×4=20。 - 若为有符号数,左移可能导致符号位变化,触发溢出。比如32位int的最大正数
2147483647(二进制最高位是0)左移1位后,最高位变成1,结果会变成负数。
右移操作(x >> n)
这里指算术右移(多数编程语言中,有符号数默认采用这种右移):把x的二进制所有位向右移动n位,左侧空出的位补符号位(正数补0,负数补1):
- 正数右移:结果等价于
x // (2^n)(向下取整)。比如10 >> 1是5,7 >> 2是1(7/4=1.75,向下取整为1)。 - 负数右移:同样遵循向下取整规则。比如
-10 >> 1是-5,-7 >> 2是-2(-7/4=-1.75,向下取整为-2)。
内容的提问来源于stack exchange,提问作者Eren Akbaş
相关产品推荐
相关产品推荐

