Java的>>>无符号右移操作在Python中的等效运算实现方法
Java无符号右移运算符
>>>的Python等效实现 特定代码的等效写法
你提供的Java代码:
((CRC & 0xFF00) >>> 8)
对应的Python等效代码为:
(CRC & 0xFF00) >> 8
适配原因
这段代码中已经先执行了CRC & 0xFF00按位与操作,运算结果的高位全部被清零,取值范围固定在0~65280之间,必然是非负数。对于非负整数,Python的普通右移运算符>>本身就会在高位补0,和Java>>>的行为完全一致。
通用场景的>>>等效实现
如果需要适配所有可能的整数(包括负数),实现和Java完全一致的32位无符号右移效果,可以使用通用写法:
# n为右移位数 (x & 0xFFFFFFFF) >> n
如果需要模拟64位无符号右移,将掩码替换为0xFFFFFFFFFFFFFFFF即可。
实现原理
- Java的整数为固定长度的带符号类型,
>>>作为无符号右移运算符,无论数值正负,移位时高位统一填充0 - Python的整数为任意精度的带符号类型,默认
>>为算术右移,负数移位时高位会填充1 - 先通过按位与固定长度的全1掩码,可将任意整数转换为对应长度的无符号正整数,再右移就和Java
>>>的效果完全一致
内容的提问来源于stack exchange,提问作者Guilherme Richter
相关产品推荐
相关产品推荐

