2的按位一元补码算子(〜)为-3。我读了一些二进制表示中的值2为0010,而Bitwise一元补码运算符将位从0更改为1,反之亦然。所以~2的值是1101.这意味着-3。但我的困惑是为什么他们把2的二进制表示作为0010.根据我的int是32位。那么为什么2不能00000000000000000000000000000010而且它的一元补充是11111111111111111111111111111101?我知道错了,但为什么?请解释一下?
答案 0 :(得分:0)
您的问题的答案是“选择二进制补码,而不是使用二进制补码,因为它具有几个方便的特性,使得算术更容易在数字电路中实现”。
我相信从您所提问题的措辞来看,有些插图会有所帮助。
要完全理解这一点,您仍然需要阅读两个补码表示法和算术-它们的工作原理和历史-但是我将尝试以类似故事的方式在这里解释基础知识。
让我们说我们有4位代表一个有符号整数值。
-8 1000
-7 1001
-6 1010
-5 1011
-4 1100
-3 1101
-2 1110
-1 1111
0 0000
+1 0001
+2 0010
+3 0011
+4 0100
+5 0101
+6 0110
+7 0111
具有以下美观便捷的特征
3 : 0011
~ : 1100 (the NOT operator gives "one's complement")
+1: 1101 (the two's complement representation of -3)
~ : 0010
+1: 0011 (back to +3)
etc
如果您了解这个4位的故事,您会发现它可以轻松扩展到适用于32位带符号整数。