按位补语

时间:2011-05-09 00:53:37

标签: c bit-manipulation twos-complement

我遇到了w=1y=7z=0x = ~(w && y) | y;以及解决方案为x = -1的示例问题,但我无法弄清楚为什么?

这是我的思考过程:
(w& y)=(1&& 7)= 1
〜1个
1位是0000 0001
〜1比特是1111 1110

不知道该怎么办。

4 个答案:

答案 0 :(得分:6)

最后一步是按位OR,所以你得到:

1111 1110 | 0000 0111 = 1111 1111

是-1。

答案 1 :(得分:1)

~1位是1111 11101111 11100000 01111111 1111, 并且1111 1111是-1。最重要的一点是负面标志,负面数字是减法的,我想你可以说。这就是为什么有符号字节可以保持-128但最多只能达到127。

答案 2 :(得分:0)

~(w && y)1111...0你是对的。 7的最后一位是1,因此|以7为1111...1-1

答案 3 :(得分:0)

首先,您应该使用&代替&&进行按位操作。其次,在计算~1 = 111...1110之后,将其与y(7)进行“或”运算得到1111..1111,即2的补码表示为-1。