计算机组成原理——第二章数据的级表示

计算机组成原理——第二章 数据的级表示

本章重点讨论计算机内部数据的机器级表示方式。主要内容包括:进位记数制、二进制定点数的编码表示、无符号整数和带符号整数的表示、IEEE 754 浮点数表示标准、西文字符和汉字的编码表示、十进制数的二进制编码表示(即 BCD 码)、C 语言中各种类型数据的表示和转换、数据的宽度和存放顺序以及几种常用检/纠错码的编码表示与使用方法。

2.1 数制和编码

2.1.1 信息的二进制编码

计算机组成原理——第二章数据的级表示_第1张图片

表示一个数值数据要确定三个要素:进位记数制、定/浮点表示和编码规则。任何给定的一个二进制 0/1 序列,在未确定它采用什么进位记数制、定点还是浮点表示以及编码表示方法之前,它所代表的数值数据的值是无法确定的。

在计算机系统内部,所有信息都是用二进制进行编码的。也就是说计算机内部采用的是二进制表
示方式。这样做的原因有以下几点。
(1) 二进制只有两种基本状态,使用有两个稳定状态的物理器件就可以表示二进制数的每一位,而制造有两个稳定状态的物理器件要比制造有多个稳定状态的物理器件容易得多。例如,用高、低两个电位,或用脉冲的有无,或脉冲的正负极性等都可以很方便、很可靠地表示“0”和“1”。
(2) 二进制的编码和运算规则都很简单。可用开关电路实现,简便易行。
(3) 两个符号 1 和 0 正好与逻辑命题的两个值“真”和“假”相对应,为计算机中实现逻辑运算和程序中的逻辑判断提供了便利的条件,特别是能通过逻辑门电路方便地实现算术运算

2.1.2 进位记数制

主要讲的就是进制的转化
在这里我自己总结一下:

  1. 十进制转化为R进制
    (1)整数部分就是除R得余法,然后从下到上为高位到低位。
    计算机组成原理——第二章数据的级表示_第2张图片
    (2)小数部分就是乘R取整法,然后从上到下为高位到低位。计算机组成原理——第二章数据的级表示_第3张图片

  2. R进制转化为十进制
    任何一个 R 进制数转换成十进制数时,只要“按权展开”即可。计算机组成原理——第二章数据的级表示_第4张图片

  3. R进制之间的转化
    通用先转化为十进制再转化。
    特殊的就是二进制转化为八进制和十六进制。
    二进制数转换成八进制数时,整数部分从低位向高位方向每 3 位用一个等值的八进制数来替换,最后不足 3 位时在高位补 0 凑满 3 位;小数部分从高位向低位方向每 3 位用一个等值的八进制数来替换,最后不足 3 位时在低位补 0 凑满 3 位。
    二进制数转换成十六进制数时,整数部分从低位向高位方向每 4 位用一个等值的十六进制数来替换,最后不足 4 位时在高位补 0 凑满 4 位;小数部分从高位向低位方向每 4 位用一个等值的十六进制数来替换,最后不足 4 位时在低位补 0 凑满 4 位。

2.1.3 定点与浮点表示

  1. 定点表示
    定点表示法用来对定点小数和定点整数进行表示。
  2. 浮点表示
    对于任意一个二进制数 X,可以表示成如下形式:
    X= ( − 1 ) s (-1)^s (1)s×M× R E R^E RE
    S 取值为 0 或 1,用来决定数 X 的符号;M 是一个二进制定点小数,称为数 X 的尾数(mantissa); E 是一个二进制定点整数,称为数 X 的阶或指数(exponent);R 是基数(radix、base),可以取值为 2、 4、16 等。在基数 R 一定的情况下,尾数 M 的位数反映数 X 的有效位数,它决定了数的表示精度,有效位数越多,表示精度就越高;指数 E 的位数决定数 X 的表示范围,其值确定了小数点的位置。

定点数的编码表示

一般规定 0 表示正号,1 表示负号。
主要有以下 4 种定点数编码表示方法:原码、补码、反码和移码。
通常将数值数据在计算机内部编码表示的数称为机器数,机器数一定是一个 0/1 序列,通常缩写成十六进制形式。
而机器数真正的值(即现实世界中带有正负号的数)称为机器数的真值。
例如,-10(-1010B)用 8 位补码表示为 11110110,说明机器数 11110110B(F6H 或 0xF6)的真值是
-10,或者说,-10 的机器数是 11110110B(F6H 或 0xF6)。
假设机器数 X 的真值 XT 为:
XT = ±Xn–1´Xn–2´…X1´X0´ (当 X 为定点整数时)
XT = ±0 . Xn–1´Xn–2´…X1´X0´ (当 X 为定点小数时)
对 XT 用 n+1 位二进制数编码后,机器数 X 表示为:
X = Xn Xn-1 Xn-2 … X1 X0
机器数 X 的位数为 n+1,其中,第一位 Xn 是数的符号位,后面 n 位 Xn-1 …X1 X0 是数值部分。

  1. 原码表示法
    原码表示法中,正数和负数的编码表示仅符号位不同,数值部分完全相同。
    原码 0 有两种表示形式:
        [+0]原=0 00…0
        [–0]原=1 00…0
    现代计算机中不用原码来表示整数,只用定点原码小数来表示浮点数的尾数部分。
    如-10的8位原码为10001010B, 10的为00001010B

  2. 补码表示法
    计算机的存储、运算、传送部件的位数有限,设其位数为n时,当俩个n位的数进行运算时,结果可能会超出n位,那么就只能保留低n位,高n位就丢失了。这个时候可能会发生俩种情况:
    (1)剩下的n位不能表示正确的运算结果,那么此时称为发生了**“溢出“**
    (2)若何以表示正确的结果,就是高位的丢失不影响正确结果,此时就相当于将一个多于n位的二进制数除以 2 n 2^n 2n得到余数,就是对 2 n 2^n 2n取余,即**“模运算”**
    补码表示方法:“正数的补码是它本身;负数的补码等于模与该负数绝对值之差。”因此,数XT的补码可用如下公式表示。
    (1)当 XT 为正数时,[XT]补= XT = M + XT(mod M)。
    (2)当 XT 为负数时,[XT]补= M – |XT| = M + XT(mod M)
    这里有一个m的意思我理解是,原来的数转化为二进制以后位数可能大于n位,那么超出n位的被模掉了,舍去的部分就是M。
    对于具有一位符号位和 n-1 位数值位的 n 位二进制整数的补码来说,其补码定义如下:
    [XT]补= 2n + XT(mod 2n)(–2n-1≤XT<2n-1)
    简单点来说就是,负数不看符号位的原码的反码加一,然后再加上符号位。“各位求反,末位加 1”

  3. 反码表示法
    负数的反码就是补码末尾减一得到,也可以是负数的原码不包括符号位各位求反得到,结果一样。

  4. 移码
    n位移码就是将补码加上 2 n − 1 2^{n-1} 2n1,得到一个无符号位的数,就是相当于将这个数加上了 2 n − 1 2^{n-1} 2n1,(我在说p)

2.2 整数的表示

2.2.1 无符号整数的表示

一般在全部都是正数运算且不归出现负值结果的场合下,例如地址运算,表示指针。一般将无符号整数说成无符号数。

2.2.2 带符号整数的表示

必须用一个二进制位来表示符号,前面的(原码、补码、反码以及移码)都可以表示带符号整数。但是补码有其突出的优点。
(1)与原码和反码相比,数 0 的补码表示形式唯一。 (2)与原码和移码相比,补码运算系统是一种模运算系统,因而可用加法实现减法运算,且符号位可以和数值位一起参加运算。 (3)与原码和反码相比,它比原码和反码多表示一个最小负数。 (4)与反码相比,不需要通过循环进位来调整结果。

2.2.3 C语言中的整数类型

C语言中对应的整数类型有:无符号unsigned short、unsigned int(unsigned)、unsigned long等。有符号:short、int、long等类型。

2.3实数的表示

2.3.1浮点数的表示格式

对于一个实数x可以表示为:X= ( − 1 ) s (-1)^s (1)s×M× R E R^E RE
S 取值为 0 或 1,用来决定数 X 的符号;M 是一个二进制定点小数,称为数 X 的尾数(mantissa); E 是一个二进制定点整数,称为数 X 的阶或指数(exponent);R 是基数(radix、base),可以取值为 2、 4、16 等。在基数 R 一定的情况下,尾数 M 的位数反映数 X 的有效位数,它决定了数的表示精度,有效位数越多,表示精度就越高;指数 E 的位数决定数 X 的表示范围,其值确定了小数点的位置。
计算机组成原理——第二章数据的级表示_第5张图片
计算机组成原理——第二章数据的级表示_第6张图片
计算机组成原理——第二章数据的级表示_第7张图片

2.3.3 IEEE 754浮点数标准

计算机组成原理——第二章数据的级表示_第8张图片
32 位单精度格式中包含 1 位符号 s、8 位阶码 e 和 23 位尾数 f;64 位双精度格式包含 1 位符号 s、
11 位阶码 e 和 52 位尾数 f。其基数隐含为 2;尾数用原码表示,第一位总为 1,因而可在尾数中缺省
第一位的 1,称为隐藏位,使得单精度格式的 23 位尾数实际上表示了 24 位有效数字,双精度格式的
52 位尾数实际上表示了 53 位有效数字。IEEE 754 规定隐藏位“1”的位置在小数点之前。
IEEE 754 标准格式中,指数用移码表示,偏置常数并不是通常 n 位移码所用的 2 n − 1 2^{n-1} 2n1,而是( 2 n − 1 2^{n-1} 2n1–1),因此,单精度和双精度浮点数的偏置常数分别为 127 和 1023。IEEE 754 的这种“尾数带一个隐藏位,偏置常数用( 2 n − 1 2^{n-1} 2n1–1)”的做法,不仅没有改变传统做法的计算结果,而且带来以下两个好处:
① 尾数可表示的位数多一位,因而使浮点数的精度更高。
② 指数的可表示范围更大,因而使浮点数范围更大

计算机组成原理——第二章数据的级表示_第9张图片

你可能感兴趣的:(计算机组成原理)