这是因为Python不考虑数字的固定宽度。所以你没有任何符号位,我们有关于C/C++ +EEM>语言(最重要的位)。换句话说,当你在负数和0xffff之间进行逐位和运算时,结果是一个大的正数而不是负数:>>> print(-7 & 0xFFFF)
65529
>>> print(-7 & 0xFFFFFFFF)
4294967289
>>>
对上述索赔的确认:
^{pr2}$
< > ><> C/C+++EEM>语言,如我们有一个强的>固定宽度< /强>数字:#include
#include
int main()
{
int i = -7 & 0xFFFFFFFF;
std::cout << i;
}
输出是相同的负数(如果我们为&运算符的右边选择正确的长度):-7
我想你需要定义一个函数来瞄准你的目标,并传递带有长度的数字(例如4字节或8字节)。在
像这样:>>> def isOverflow(num, width=32):
if num > 0 and num > 2**(width-1) -1 :
return True
elif num < 0 and abs(num) > 2**(width-1):
return True
return False
或者更有效的版本ÿ