1

假设:2 的补码,整数。只是一个快速的问题。为什么如果 a 有一个数字,并取它的 NOT,它将等于负 + 或 - 1。例如:

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

我知道这些位是倒置的。发生这种情况是否有任何原因,或者这只是巧合。

4

2 回答 2

0

这是因为 2 的补码符号的工作方式。

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

以 2 的补码 8 位值为例:

0000 0000 = 0 (base 10)

和 2 的补码负 8 位值:

1111 1111 = -1 (base 10)
于 2013-06-20T22:59:41.697 回答
0

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

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

于 2013-06-20T23:00:22.357 回答