在python3
中运行以下命令>>> print(2, bin(2), ~2, bin(~2))
> 2 0b10 -3 -0b11
我认为~2
应为0b01
或0b101
。
为什么-0b11
?
答案 0 :(得分:2)
2 = 00000010
~2 = 11111101
两个补码中11111101
的价值是多少?
要回答这个问题,请遵循以下简单算法:
11111101 > 00000010 > 00000011
^ ^
Flip Add 1
请注意,最重要的位是“1”,因此符号为负。
答案 1 :(得分:1)
首先看~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