假如我的计算机是32位的,接下来要计算~5的值:
5 的二进制表达式为:0000 0000 0000 0000 0000 0000 0000 0101
执行 ~ 运算,即 ~ 5后: 1111 1111 1111 1111 1111 1111 1111 1010,即结果为-6 ?
计算机普遍使用“补码”表示负数;知道一个数的“补码”,求其值(“源码”)的方法是:
首先看符号位(最左的一位),如果是1代表是负数(-),如果是0代表是正数(+);
然后对该值取反再+1,得到其“源码”
“补码”1111 1111 1111 1111 1111 1111 1111 1010,
首先,其符号位(最左一位)是1,表明它是负数;
然后,欲求其“源码”,对“补码”取反再加1:
0000 0000 0000 0000 0000 0000 0000 0101 + 1 =
0000 0000 0000 0000 0000 0000 0000 0110
最后,在得到的“源码”前加一个负号,
即-0000 0000 0000 0000 0000 0000 0000 0110 = -6
即执行 ~ 运算获得“补码”,根据“补码”首位判断正负,再对“补码”取反加1
>>> aa=5
>>> ~aa
-6
>>> ~aa+1
-5
>>> -aa
-5
>>> bin(aa)
'0b101'
>>> bin(~aa)
'-0b110'
>>> bin(~aa+1)
'-0b101'
>>> bin(-aa)
'-0b101'