我们都知道计算机中的数据是用 补码 表示的。相信大家对他们的概念都比较熟悉了,现在说一下需要注意的几个地方。 我们暂且用 8 位表示。
1、原码的表示范围是 -127 ~ +127 共256个。(包含一个 +0 和 -0)。正是由于原码有 正负零之分,给我们的运算带来了很大的麻烦。所以才引进 反码。

2、反码的表示范围是 -127 ~ +127 共256个。(包含一个 +0 和 -0)。
正数的反码与原码相同。负数的反码,首位(符号位)不变,其他位取反。
例: +0 反码是:00000000
-0 反码是:11111111 (符号位是1,其他位取反)

3、补码的表示范围是 -128 ~ +127 共256个。
例:+0 的补码:00000000
-0 的补码:00000000 (反码 加 1)

例: -127 的补码 怎么计算呢?
-127 原码是 11111111 ---> 反码为 10000000 ---->补码为 10000001 。即 在计算机中, 10000001 就表示 -127。

4、在这 8 位系统中,-128 没有相对应的原码和反码,它在计算机里面的表示形式是:10000000
所以,计算机为32位的时候,10000000000000000000000000000000 表示 -2(31)。2的 31 次方。

5、对于编程语言中的 移位 运算,比如一个32 位的 int 型左移 33 位,这样的话我们可以取模运算。即 对于 n>32的数,语言规定的就是 实际移位数为 (n-32)。比如左移 33 位,实际上和左移 1 位 是相同的。

  码就是在原有的补码的基础上对于符号取反。对于8位存储数字,例如:-1的补码是11111111,它的移码就是01111111;
 

 

  例如: X=+1011 [X]补=01011 [X]移=11011

 

  X=-1011 [X]补=10101 [X]移=00101