以下是python代码片段:
1 & -1 # 1
2 & -2 # 2
3 & -3 # 1
...
似乎任何
n & -n
总是返回最右(最后)位,我真的不知道为什么有人能帮我理解吗? 最佳答案
这是因为负数是用二进制表示的,这叫做二的补码表示法。
要创建某个数字n的二补(换句话说,要创建-n的表示):
反转所有位
加1
换句话说,当你写1 & -1
的时候,它的意思是1 & ((~1)+1)
。初始值~1
给出值1111110
,添加一个则给出11111111
(对于这些例子,让我们坚持使用8位。)使用1
的值只会得到1
。
在下一种情况下,2 & -2
表示2 & ((~2)+1)
。反转2
表示11111101
,添加一个表示11111110
。然后用2
(10
二进制)给出2
。
最后3 & -3
表示3 & ((~3)+1)
。Invert3
给出11111100
,add1
给出11111101
,with3
(11
二进制)给出1
。
关于algorithm - 为什么n按位和-n总是返回最右边的位(最后一位),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54375295/