python3: ~2 = -0b11?
python3: ~2 = -0b11?
运行以下python3
>>> print(2, bin(2), ~2, bin(~2))
> 2 0b10 -3 -0b11
我认为~2
应该是0b01
或0b101
。
为什么 -0b11
?
先看~2:
2 = 0b0000...10 (n leading 0s)
~2 = 0b1111...01 (n leading 1s)
然后分析-0b11
大多数计算机数字表示使用补码表示法,其中:
A - B = A + ~B + 1
所以 -0b11 实际上是:
- 0b11
= 0 - 0b11
= 0b0000...00 + 0b1111...00 + 1
= 0b1111...01
2 = 00000010
~2 = 11111101
11111101
的二进制补码是多少?
要回答这个问题,请遵循这个简单的算法:
- 翻转所有位
- 结果加 1
- 根据MSB判断符号
11111101 > 00000010 > 00000011
^ ^
Flip Add 1
注意最高位是“1”,所以符号是负数
运行以下python3
>>> print(2, bin(2), ~2, bin(~2))
> 2 0b10 -3 -0b11
我认为~2
应该是0b01
或0b101
。
为什么 -0b11
?
先看~2:
2 = 0b0000...10 (n leading 0s)
~2 = 0b1111...01 (n leading 1s)
然后分析-0b11
大多数计算机数字表示使用补码表示法,其中:
A - B = A + ~B + 1
所以 -0b11 实际上是:
- 0b11
= 0 - 0b11
= 0b0000...00 + 0b1111...00 + 1
= 0b1111...01
2 = 00000010
~2 = 11111101
11111101
的二进制补码是多少?
要回答这个问题,请遵循这个简单的算法:
- 翻转所有位
- 结果加 1
- 根据MSB判断符号
11111101 > 00000010 > 00000011
^ ^
Flip Add 1
注意最高位是“1”,所以符号是负数