1、前置条件
假如 int 是1个字节,最大值为0b11111111(十进制 255)
2、问题描述、原因及解决方案
问题描述:
如果一个数 0b10111110(190)
左移1位(高位截断 低位补0) 190 <<1 = 380(python操作) 其实这个时候 已经溢出了 最大值255原因:
从二进制看 预期是 0b01111100(124) 实际 是 0b1,01111100(380) ,多了一个字节, 高位有一个1
解决方案:
去掉高位的1,& 11111111(255)即可
3、Python操作
>>> 190 <<1
380
>>> 380 &255
124
本文探讨了在Python中进行二进制左移运算时可能导致的溢出问题。当一个字节的整数如190(0b10111110)左移一位时,由于超出最大值255,实际结果380并不符合预期的124。解决方法是对结果进行与操作,用255(0b11111111)进行掩码,以确保结果不超过字节范围。通过示例代码展示了如何正确处理这种溢出情况。
1070

被折叠的 条评论
为什么被折叠?



