Rah*_*hra 4 bitwise-operators python-3.x
只是对二进制补码的工作方式有疑问。例如(在python中):
a = 60
print(~a)
Run Code Online (Sandbox Code Playgroud)
给出一个输出:-
-61
Run Code Online (Sandbox Code Playgroud)
不是二进制的补码60是:
a = 0011 1100
~a = 1100 0011
Run Code Online (Sandbox Code Playgroud)
不应该-60吗?
我知道我错了,但为什么它会向前移动-61?
~是一个按位反转运算符,它的作用完全按照定义:
x 的按位反转定义为 -(x+1)。
这就是整数的二进制补码表示的按位反转的工作原理。
二进制补码轮很好地形象化了这一点:
如您所见,1 的按位反转为 -2,2 的按位反转为 -3,...,60 的按位反转将为 -61。
你快到了。1100 0011实际上是-61。
以下是负二进制转换为十进制的方法:
反转位
添加 1
转换为十进制
添加负号
所以:
1100 0011
0011 1100 <-- bits inverted
0011 1101 <-- one added
61 <-- converted to decimal
-61 <-- added negative sign
Run Code Online (Sandbox Code Playgroud)
来自维基百科的二进制补码页面:
N 位数字的二进制补码定义为其相对于 2^N 的补码。例如,对于三位数字 010,其补码为 110,因为 010 + 110 = 1000。
这里1100 0011的补码是0011 1101cuz
1100 0011
+ 0011 1101
-------------
1 0000 0000
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8619 次 |
| 最近记录: |