一. 机器数和真值
1、机器数
一个数在计算机中的二进制表示形式, 叫做这个数的机器数。机器数是带符号的,计算机中,最高位存放符号, 称之为符号位,符号位非负数为0, 负数为1.
2、真值
带符号位的机器数对应的真正数值称为机器数的真值。
十进制中的数 +3
的机器数是00000011
, 真值是+0000011
十进制中的数 -3
的机器数是10000011
, 真值是-0000011
二. 原码, 反码, 补码
计算机要使用一定的编码方式存储数据. 原码, 反码, 补码是机器存储一个具体数字的编码方式.
1. 原码
原码就是符号位加上真值的绝对值, 最高位表示符号, 其余位表示值
[+1]原 = 0000 0001
[-1]原 = 1000 0001
8位二进制数的取值范围是
[1111 1111, 0111 1111]
, 十进制表示:[-127, 127]
2. 反码
- 正数的反码是其本身
- 负数的反码是在其原码的基础上, 符号位不变,其余各个位取反.
[+1] = [0000 0001]原 = [0000 0001]反
[-1] = [1000 0001]原 = [1111 1110]反
3. 补码
- 正数的补码就是其本身
- 负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)
[+1] = [0000 0001]原 = [0000 0001]反 = [0000 0001]补
[-1] = [1000 0001]原 = [1111 1110]反 = [1111 1111]补
计算机进行加减乘除运算时会将符号位参与运算
反码: 减法(存在 0 和最小位 -128问题)
补码: 减法(perfect)
原码或反码表示的范围为[-127, +127], 而使用补码表示的范围为[-128, 127].
- 正数:补码=反码=原码
- 负数:补码=负数反码+1。