use*_*004 4 python bit-manipulation
为什么按位不能切换到切换位的预期效果?参见下面的例子:
a = 5
print(bin(a))
b = ~a
print(bin(b))
Run Code Online (Sandbox Code Playgroud)
这是输出:
0b101
-0b110
Run Code Online (Sandbox Code Playgroud)
问题是为什么左边的第一个位没有切换?
考虑到Python文档说:
~x返回x的补码 - 通过将每个1切换为0而每个0切换为1得到的数字.
编辑:您是说"〜"不是简单切换位的运算符,而是它是二进制补码的运算符?如果是这样,为什么从文档中引用的句子不能说明这一点.Python文档中的上述句子并不意味着这一点.
use*_*ica 13
它正在切换所有位.所有这些,包括无限数量的前导零,产生无限数量的前导零:
0b...111111111111111111111111111111111111111111111111111010
Run Code Online (Sandbox Code Playgroud)
因为Python模拟无限位表示,而不是3位或32位或64位或任何有限数字.
Python无法向您显示无限数量的前导,因此它会在前面显示bin(abs(b))一个-符号.abs(b)是的6,bin(6)是的'0b110',所以你看
-0b110
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2191 次 |
| 最近记录: |