假设:2 的补码,整数。只是一个快速的问题。为什么如果 a 有一个数字,并取它的 NOT,它将等于负 + 或 - 1。例如:
553481923
~553481923 = -553481924
2147455726
~2147455726 = -2147455727
-2147455725
~-2147455725 =2147455724
我知道这些位是倒置的。发生这种情况是否有任何原因,或者这只是巧合。
假设:2 的补码,整数。只是一个快速的问题。为什么如果 a 有一个数字,并取它的 NOT,它将等于负 + 或 - 1。例如:
553481923
~553481923 = -553481924
2147455726
~2147455726 = -2147455727
-2147455725
~-2147455725 =2147455724
我知道这些位是倒置的。发生这种情况是否有任何原因,或者这只是巧合。
这是因为 2 的补码符号的工作方式。
2的补码整数的范围是(-2^31) to (2^31 - 1)
以 2 的补码 8 位值为例:
0000 0000 = 0 (base 10)
和 2 的补码负 8 位值:
1111 1111 = -1 (base 10)
那是因为您可以在 2 的补码系统中表示一个额外的负值,因为00000000
是零。这意味着在您可以表达的所有正数中(最多01111111
),您仍然会被缩短那一位。另一方面,你得到10000000
一个负数。(我一直在使用字节,但这适用于任何长度的单词。)