2.1 机器数、原码、反码、补码
一、机器数和真值
1.机器数
(1)定义:一个数在计算机中的二进制表示形式, 叫做这个数的机器数。
(2)带符号:机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1。
(3)EG:十进制中的数 +3 ,计算机字长为8位,转换成二进制就是00000011。如果是 -3 ,就是 10000011 。
那么,这里的 00000011 和 10000011 就是机器数。
2.真值
(1)第一位是符号位 ——> 机器数的形式值不等于真正的数值
(2)机器数的真值:带符号位的机器数对应的真正数值
(3)EG:符号数 10000011,其最高位1代表负,其真正数值是 -3 而不是形式值131(10000011转换成十进制等于131)
二、原码, 反码, 补码的基础概念和计算方法
原码、反码、补码——计算机的三种编码方式
1.原码
- 用第一位表示符号, 其余位表示值。
[+1]原 = 0000 0001
[-1]原 = 1000 0001
第一位是符号位. 因为第一位是符号位, 所以8位二进制数的取值范围就是:
[1111 1111 , 0111 1111]
即
[-127 , 127]
2.反码
- 正数的反码是其本身
- 负数的反码是在其原码的基础上, 符号位不变,其余各个位取反.
[+1] = [00000001]原 = [00000001]反
[-1] = [10000001]原 = [11111110]反
3.补码
- 正数的补码就是其本身
- 负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)
- 能够多表示一个最低数(-128)
[+1] = [00000001]原 = [00000001]反 = [00000001]补
[-1] = [10000001]原 = [11111110]反 = [11111111]补
4.为何要用反码、补码
(1)反码——为了解决原码减法问题
计算十进制的表达式: 1-1=0
1 - 1 = 1 + (-1) = [00000001]原 + [10000001]原 = [10000010]原 = -2
即:1 - 1 = 1 + (-1) = [0000 0001]原 + [1000 0001]原= [0000 0001]反 + [1111 1110]反 = [1111 1111]反 = [1000 0000]原 = -0
(2)补码——为解决0的符号以及两个编码的问题
0带符号是没有任何意义的. 而且会有[0000 0000]原和[1000 0000]原两个编码表示0
1-1 = 1 + (-1) = [0000 0001]原 + [1000 0001]原 = [0000 0001]补 + [1111 1111]补 = [0000 0000]补=[0000 0000]原
(-1) + (-127) = [1000 0001]原 + [1111 1111]原 = [1111 1111]补 + [1000 0001]补 = [1000 0000]补= -128
【可以用[1000 0000]表示-128,并且-128没有原码和反码表示】
(3)范围问题(使用8进制情况下)
- 原码、反码:【-127,127】
- 补码:【-128,127】(能够多表示一个最低数)