x& amp;的意义(-x)在2的补语中?

时间:2017-10-02 18:13:51

标签: bit-manipulation bit twos-complement bitwise-and

其中' - '表示负x,'&'表示按位AND。

程序中的数字是8位2的补码,我似乎无法找到输入和输出之间的相关性。

8  & (-8)  = 8
7  & (-7)  = 1
97 & (-97) = 1

所以可能重要的是位操作?

0000 1000 & (1111 1000) = 0000 1000
0000 0111 & (1111 1001) = 0000 0001
0110 0001 & (1001 1111) = 0000 0001

在上述每种情况下,高4位总是最终为0,但我找不到输入之间的相关性以及低4位最终的结果。

有什么想法吗?

答案: Find the lowest set bit

2 个答案:

答案 0 :(得分:2)

为了解释另一个答案,二者的补码等于一个数的加1加1.让我们看一下如何将一个补码加到1中。

8 -> 00001000 (bin) -> 11110111 (oc) -> 11111000 (tc)

在这里,注意添加的1如何通过一个补码移动直到它到达第一个0,翻转该位和它右边的位。并且,还要注意,一个补码中第一个0的位置也是原始二进制表达式中第一个1的位置。

x & (-x)中,x中第一个1左边的位将为0,因为它们仍然从取一个补码中翻转。然后,第一个1右边的位也将为0,因为它们在x中为0(否则前一个1将更早)。

因此,x & (-x)的输出将是2的幂,对应于x中第一个1的位置。

答案 1 :(得分:0)

根据定义,二进制补码等于一的补码(所有反转的位)加一。

如果您只使用数字&及其一个补码,则始终会0000 0000

理解模式的关键在于:如果+ 1操作改变了其他位或仅改变了最后一位。也就是说,如果数字在结尾处有一个1,并且如果任何提醒将在+1添加后传播。