1.原码
原码的定义:十进制数据的二进制表示形式就是原码。
(1)原码的最左边那位是符号位,其他位为数据位,符号位是0则为正数,符号位是1则为负数。
(2)一个byte有8bit,最大值是0111111(+127),最小值是11111111(-127)
正数计算:
5+2=7
00000101
+ 0010
00000111
2.反码
反码出现的原因:原码用符号位来表示正负,所以负号难以和其他数进行计算,反码出现,作为负数的计算救星。
反码的定义:正数的反码等于本身,负数的反码是符号位保存不变,其余按位取反。比如10000101(-5负数原码)->11111010(反码)。
反码的最大值是0111111(+127),最小值是11111111(-127)
负数计算:10000101(十进制为-5)的反码11111010
-5-1=-6
11111010
- 1
11111001
把11111001转回原码是1000110 刚好为-6。
3.补码
补码的引入:反码也有缺点,如果是负数跨零进行计算的话,计算得出的结果不对,这时候,作为反码的补充编码-补码出现。
补码的定义:正数的补码是本身,负数的补码等于其反码+1。比如10000101(-5负数原码)->11111010(反码)->11111011(补码)。
反码的最大值是+127,最小值是-128
跨零计算:
-5+3=-2
11111011
+ 0011
11111110
把11111110【补码】转回原码,对其反码+1得10000010,十进制为-2。
4.移码
移码的定义:正数的移码是本身,负数的移码等于其补码然后对符号位取反。比如10000101(-5负数原码)->11111010(反码)->11111011(补码)->01111011(移码)。
计算:
-5+3=-2
01111011
+ 0011
01111110
把01111110【移码】转回原码,对其补码然后对符号位取反得10000010,十进制为-2。
5.原码、反码和补码的数据表示范围: