不是或补数?

时间:2013-06-20 22:55:56

标签: binary logic boolean-logic

假设:2的赞美,整数。 只是一个简单的问题。为什么如果a有一个数字,并取其中的NOT,它将等于负+或 - 1.例如:

553481923
~553481923 = -553481924
2147455726
~2147455726 = -2147455727
-2147455725
~-2147455725 =2147455724

我知道这些位是反转的。是否有任何理由发生这种情况,或者这只是巧合。

2 个答案:

答案 0 :(得分:0)

这是因为2的补码表示方式有效。

2的补码整数范围是(-2^31) to (2^31 - 1)

以2的补码8位值为例:

0000 0000 = 0 (base 10)

和2的补码负8位值:

1111 1111 = -1 (base 10)

答案 1 :(得分:0)

这是因为你可以在2的补码系统中表达一个额外的负值,因为00000000为零。这意味着在你可以表达的所有正数中(最多01111111),你仍然会被缩短一个额外的位。另一方面,您将10000000作为负数。 (我一直在使用字节,但这适用于任何长度的单词。)

https://stackoverflow.com/a/1049774/691859