计算机组成原理(二)数据表示

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】(能够多表示一个最低数)

猜你喜欢

转载自blog.csdn.net/ErinLi1998/article/details/88559908