1. 反码的范围
1.1. 反码表示法规定: 正数的反码与其原码相同。负数的反码是对其原码逐位取反, 但符号位除外。
1.2. 在规定中, 8位二进制码能表示的反码范围是-127~127。
1.3. -128没有反码。
2. 原码、反码、补码的范围
2.1. 8位二进制数
原码 -127~127
反码 -127~127
补码 -128~127
2.2. n位二进制数
2.3. 补码比其它码多一位, 这是为什么呢? 问题出在0上。
[+0]原码=0000 0000, [-0]原码=1000 0000
[+0]反码=0000 0000, [-0]反码=1111 1111
[+0]补码=0000 0000, [-0]补码=0000 0000
你会发现, +0和-0的补码是一样的。即0的补码只有一种表示。
2.4. [-0]补码是怎么得来的?
负数的补码就是反码整体加一。符号位上的进位舍弃符号位。所以, 舍弃了符号位的补码的第一位是数值位, 不是符号位,符号位舍弃了。
2.5. 所以, 补码能表示的数的个数中, 比原码反码少了一个, 所以补码可以多表示一个真值为-128的数。
2.6. 机器中只有加法, 减法会变成补码的加法。