位运算index>>=1是否等价于index除以2并舍弃余数?
关于
index >>= 1等价于除以2并舍弃余数的验证 首先明确:对于正整数来说,index >>= 1确实等价于index = index / 2后舍弃余数(也就是数学上的向下取整)。
用二进制运算解释你的测试案例:
- 当
index=4时,二进制为100,右移1位后变为10,对应十进制的2,和4/2=2结果完全一致。 - 当
index=5时,二进制为101,右移1位会舍弃最右侧的1,结果为10,对应十进制的2——这正好是5/2舍弃余数后的结果(5除以2商2余1,丢掉余数后就是2)。
需要注意的边界情况:
- 这个等价关系仅适用于正整数。如果是负整数,不同编程语言的右移实现存在差异:算术右移会保留符号位,结果和除以2的向下取整逻辑一致;但逻辑右移会直接补0,结果就和除法舍弃余数的规则不符了。
- 位运算的执行效率通常高于除法操作,所以很多性能敏感的场景会用
>>=1替代除以2的常规写法。
你测试的结果其实完全符合这个技巧的描述,之前的疑惑可能是没明确“舍弃余数”就是直接取商的整数部分,不管小数部分大小都直接丢弃。
内容的提问来源于stack exchange,提问作者Alexander Nedelchev
相关产品推荐
相关产品推荐

