以下是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。然后用210二进制)给出2
最后3 & -3表示3 & ((~3)+1)。Invert3给出11111100,add1给出11111101,with311二进制)给出1

关于algorithm - 为什么n按位和-n总是返回最右边的位(最后一位),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54375295/

10-12 17:50
查看更多