计算机组成原理——机器内的数据表示

房东的猫 提交于 2020-01-16 02:25:17

1.无符号数与有符号数

计算机中存储与参与运算的数分为有符号数与无符号数。这些数存放在寄存器中,通常称寄存器的位数为机器字长。

当存放有符号的数时,就需要留出一位来存放符号,规定在符号位“0”表示“+”号,“1”表示“-”号。

以机器字长为16位为例,若其表示无符号数,可以表示范围为0~65535,而表示有符号数,由于需要拿出一位来存放符号,因此所表示数的范围为-32768~+32767。

2.定点数与浮点数

小数点固定在某一位置的数为定点数,小数点位置可以浮动的数为浮点数,这里说的小数点实际上为抽象的人为规定,并不实际存在于机器中。当小数点位于数符和第一数值位之间时,机器内的数为纯小数;当小数点位于数值位之后时,机器内的数为纯整数。采用定点数的机器为定点机,在定点机中,由于小数点的位置固定不变,故当机器处理的数不是纯小数或者纯整数时,必须乘上一个比例因子,否则会产生“溢出”。浮点数的表示类似于数学上的科学计数法,如 :

小数点的位置是可以变化的,但是因为乘上了不同的10的方幂,所以值不变。通常情况下,浮点数可以表示成:

其中,S为尾数(可正可负),j为阶码(可正可负),r为基数(或基值),计算机中,基数可取2,4,8,16等。

以基数r=2为例,数N可以写成下列不同的形式:

3.原码、反码、补码、移码

1.原码

 是最简单的机器数表示法。用最高位表示符号位,‘1’表示负号,‘0’表示正号。其他位存放该数的二进制的绝对值。

1010:最高位为“1”,表示这是一个负数,其他三位为“010”,即

,所以1010表示十进制数(-2)。

下图给出部份正负数数的二进制原码表示法:

  正数     负数
0 0000   -0 1000
1 0001   -1 1001
2 0010   -2 1010
3 0011   -3 1011
4 0100   -4 1100
5 0101   -5 1101
6 0110   -6 1110
7 0111   -7 1111

计算:

0001+0010=0011 (1 + 2 = 3)

0000+1000=1000 (0 - 0 = 0)

0001+1001=1010 (1 - 1 = -2)

这里我们可以看出,原码在计算一个数加上他的相反数时,出了问题。

2.反码

正数的反码是他本身,负数的原码是原码符号位不变,其他位按位取反。

  正数     负数
0 0000   -0 1111
1 0001   -1 1110
2 0010   -2 1101
3 0011   -3 1100
4 0100   -4 1011
5 0101   -5 1010
6 0110   -6 1001
7 0111   -7 1000

计算:

0001+1110=1111 (1 + (- 1) = - 0) (此处可以看到相反数相加的问题解决了)

1110+1101=1011 (-1 + (-2) = - 4)

1101+1100=1001 (-2 + (-3) = - 6)

这里可以看出,利用反码进行绝对值的运算时可以得到0,但是进行两个负数相加时,结果出错,并且比正确值小1。

3.补码

补码在反码的基础上末位加一,即对原码符号位不变,其他位按位取反,最后在末位加一。

补码的原理来自于“模”,例如,时钟指示6点,欲使他指示3点,既可以按顺时针转9圈,也可以按逆时针转3圈,结果是一致的,由于时钟一圈能指示12个小时,数学上称12为模,称+9是-3以12为模的补数。因此只要确定了“模”,就可以找到一个与负数等价的正数来代替此负数,这样就可以把减法运算用加法运算来实现。

  正数     负数
0 0000   -0 0000
1 0001   -1 1111
2 0010   -2 1110
3 0011   -3 1101
4 0100   -4 1100
5 0101   -5 1011
6 0110   -6 1010
7 0111   -7 1001
      -8 1000

计算:

0001+1111=0000 (1 + (-1) = 0)

1111+1110=1101 (-1 + (-2) = -3)(正确)

4.移码

移码(又叫增码)是符号位取反的补码,一般用指数的移码减去1来做浮点数的阶码,引入的目的是为了保证浮点数的机器零为全0。

4.IEEE 754标准

按IEEE 754标准,常用的浮点数有三种:

  符号位S 阶码 尾数 总位数
短实数 1 8 23 32
长实数 1 11 52 64
临时实数 1 15 64 80

阶码用移码表示,阶码的真值都被加上一个常数(偏移量),如短实数、长实数和临时实数的偏移量用十六进制数表示分别为7FH、3FFH和3FFFH。尾数部分通常都是规格化表示,即非“0”的有效位最高位总是“1”,但在IEEE标准中,有效位呈如下形式:

1△ffff...fff (△为假想的二进制小数点)。

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!