我试图了解负整数上的位移操作>>
。
-2 >> 1 # -1
-3 >> 1 # -2
-5 >> 1 # -3
-7 >> 1 # -4
有人可以解释这是怎么做的吗?我知道这与Two的补码有关,但我不能与移位运算有关。
最佳答案
完整说明提供here
因此,移位运算符的解释为:
为了理解上面的解释,您可以使用以下内容进行检查:
def twos_comp(val, nbits):
"""Compute the 2's complement of int value val"""
if val < 0:
val = (1 << nbits) + val
else:
if (val & (1 << (nbits - 1))) != 0:
# If sign bit is set.
# compute negative value.
val = val - (1 << nbits)
return val
def foo(a,b):
print("{0:b} >> {1:b} = {2:b} <==> {3:b} >> {4:b} = {5:b}".format(
a,b,a>>b,
twos_comp(a,8),b, twos_comp(a>>b,8)
))
foo(-2, 1)
foo(-3, 1)
foo(-5, 1)
foo(-7, 1)
哪个输出:
-10 >> 1 = -1 <==> 11111110 >> 1 = 11111111
-11 >> 1 = -10 <==> 11111101 >> 1 = 11111110
-101 >> 1 = -11 <==> 11111011 >> 1 = 11111101
-111 >> 1 = -100 <==> 11111001 >> 1 = 11111100
如您所见,数字的二进制补码将扩展符号。
关于python - 负整数的位移?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39549971/