1.4k likes | 1.48k Views
第二章 计算机中的信息表示. 数值型数据. 数据信息. 非数值型数据. 控制信息. 指令信息等. 本章类容 : 1. 数值数据的进位数值 2. 带符号数的表示 ( 原码、补码、反码、移码 ) 3. 小数的表示 ( 定点小数、浮点数 ) 4. 字符表示方法 5. 指令信息的表示 ( 指令格式、寻址方法、功能分类 ). 第一节 数据信息的表示. 进位计数制. 数值数据表示三要数. 符号的表示. 小数点的处理. 2.1. 进位计数制. 数制中的三个基本名词术语: 数码: 用不同的数字符号来表示一种数制的 数值,这些数字符号称为“数码”。
E N D
第二章 计算机中的信息表示 数值型数据 数据信息 非数值型数据 控制信息 指令信息等 本章类容: 1.数值数据的进位数值 2.带符号数的表示(原码、补码、反码、移码) 3.小数的表示(定点小数、浮点数) 4.字符表示方法 5.指令信息的表示(指令格式、寻址方法、功能分类)
第一节 数据信息的表示 进位计数制 数值数据表示三要数 符号的表示 小数点的处理
2.1. 进位计数制 数制中的三个基本名词术语: 数码:用不同的数字符号来表示一种数制的 数值,这些数字符号称为“数码”。 基: 数制所使用的数码个数称为“基”。 权: 某数制各位所具有的值称为“权”。
2.1.1 十进制数(Decimal System) 数码:0、1、…… 8、9 基:10(逢十进一,借一当十) 权:以10为底的幂 任何一个十进制数DnDn-1…D1D0D-1…,可以表示成按权展开的多项式: Dn×10n+Dn-1×10n-1+…+D1×101+D0×100+D-1×10-1+…+D-m×10-m 例如:1234.5的按权展开多项为: 1234.5=1×103+2×102+3×101+4×100+5×10-1
2.1.2 二进制数(Binary System) 数码:0和1 基:2 权:以2为底的幂 任何一个二进制数BnBn-1…B1B0B-1…B-m,可以表示成按权展开的多项式: Bn×2n+Bn-1×2n-1+…+B1×21+B0×20+B-1×2-1+…+B(-m+1)×2-(m-1)+B-m×2-m 例如: 1101.01的按权展开多项为: 1101.01=1×23+1×22+0×21+1×20+0×2-1+1×2-2
2.1.3 八进制数(Octave System) 数码:0、1、…… 6、7 基:8 权:以8为底的幂 八进制数的一般式可以表示为: On×8n+On-1×8n-1+…+O1×81+O0×80+O-1×8-1+…+O(-m+1)×8-(m-1)+O-m×8-m
2.1.3 十六进制数(Hexadecimal System) 数码:0、1、…… 8、9、A(1010)、B(1011)、C(1100)、D(1101)、E(1110)、F(1111) 基:16 权:以16为底的幂 十六进制数的一般式可以表示为: Hn×16n+Hn-1×16n-1+…+H1×161+H0×160+H-1×16-1+…+H(-m+1)×16-(m-1)+H-m×16-m 例如: A89B.CD的按权展开多项为: (A89B.CD)16=A×163+8×162+9×161+B×160+C×16-1+D×16-2
2.2. 各种进位制之间的相互转换 2.2.1.任意进制数转换为十进制数 二进制数、八进制数、十六进制数等各种进制数转换为十进制数可统一表示为下式: 式中: R ─ 某种进位计数制的基数; i ─ 位序号; Ki─ 第i位上的一个数码为0~R-1中的任一个; Ri ─ 则表示第i位上的权; m,n ─ 最低位和最高位的位序号。 用上式可将任何一个二进制数、八进制数、十六进制数直接转换为十进制数,这叫做按权展开法。
任意进制转换为十进制例子 ⑴. 二进制数转换为十进制数 (1011.0101)2 =1×23+0×22+1×21+1×20+0×2-1+1×2-2+0×2-3+1×2-4 =8+0+2+1+0+1/4+0+1/16 =(11.3125)10 ⑵. 八进制数转换为十进制数 (75.21)8=7×81+5×80+2×8-1+1×8-2 =56+5+2/8+1/64 =(45.20238)10 ⑶. 十六进制数转换为十进制数 (175.FB)16=1×162+7×161+5×160+15×16-1+11×16-2 =256+112+5+15/16+11/162 =(373.98046875)10
2.2.2. 十进制整数转换为二进制数 (1). 除基取余法 (连除基数、倒取余) 方法: “除2取余”,即十进制整数被2除,取其余数,商再被2除,取其余,……,直到商为0时结束运算。然后把每次的余数按倒序规律排列就得到等值的二进制。 例:把一个十进制数156转换为二进制数。 结果:(156)10=(10011100)2
2.2.2. 十进制整数转换为二进制数 (2).减权定位法 方法:从高位起依次减各位的权,若够减,则该位为1,差值继续往下比较,否则该位为0,跳过该位,直所有位比较完成 例:将(75)10转换为二进制数 位权 差 位值 75-64 = 11… 1 11<32 … 0 11<16 … 0 11-8 = 3 … 1 3 <4 … 0 3 -2 = 1 … 1 1- 1 = 0 … 1 (75)10=(1001011)2
2.2.3. 十进制纯小数转换为二进制数 (1). 乘基取整法 (连乘基数、正取整) 方法:把十进制纯小数乘以2,取其整数,乘积的小数部分再乘以2,取整..….,直到乘积的小数部分为0。然后把每次乘积的整数部分按正序规律排列,即为等值的二进制数。 例: 将(0.6875)10转换为二进制数: 小数 基 积 取整 0.6875×2=1.3750 l 0.375 ×2=0.75 0 0.75 ×2=1.5 1 0.5 ×2 =1.0 1 结果为 (0.6875)10 =(0.1011)2
(2).减权定位法 方法:与整数减权定位类似,从高位起依次减各位的权,若够减,则该位为1,差值继续往下比较,否则该位为0,跳过该位,直到精度满足要求为止 例:将(0.6785)10转换为二进制数 位权 差 位值 0.6785-0.5 =0.1785 … 1 0.1785<0.25 … 0 0.1785-0.125=0.0535 … 1 0.0535<0.0625 … 0 (0.6785)10=(0.1010…)2 2.2.3. 十进制纯小数转换为二进制数
2.2.4. 十进制带小数转换为二进制数 方法:整数部分“除2取余”,小数部分“乘2取整”,然后再进行组合。 例:将(86.625)10转换为二进制数 整数部分: (86)10 = (101011)2 小数部分: (0.625)10= (0.101)2 结果: (86.625)10= (101011.101)2
2.2.5. 二进制数与十六进制数的相互转换 (1).二进制数→十六进制数 4位二进制数代表一位十六进制数,在转换过程中:以小数点为界,4位二进制数为一组,不足4位用0补全,然后每组用等值的十六进制数表示。 (1001010.101)2 =(01001010.1010)2 =(4A.A)16 在汇编语言中,十六进制数用后缀“H”表示。所以,(322F)16应写成322FH。 (2).十六进制数→二进制数 把十六进制数的每一位用等值的4位二进制数来替换即可,如: (4F.8A)16 =(01001111.10001010)2 =( 1001111.1000101)2
2.3 带符号数的表示 2.3.1 机器数 2.3.2 原码、反码、补码和移码 2.3.3 定点数和浮点数
2.3.1 机器数 2.3.1.1.机器数和真值的概念 符号的数值化:把正负符号用一位二进制数码来表示。 符号位:符号数值化后占的若干个数值位。 机器数:数的符号用二进制数“0”或“1”来表示的,且符号位总是在该数的最高数值位之前的那种数。规定“0”表示正号,“1”表示负号。原码、补码、反码、移码等把符号位和数值位一起编码表示的数就是机器数。 真值:用“+”、“-”表示符号的那种数。 例: N1=+0.1011,N2=-0.1011,这是真值, 表示成机器数就为: [N1]原=0.1011,[N2]原=1.1011。
2.3.1.2 机器数的特点 ⑴用二进制数码表示,优点: ①使用元器件简单,便于硬件实现 ②运算简单 ③节省存储设备 ④便于用逻辑代数进行逻辑设计 ⑵机器数所表示的数值范围是有限的,无法表示时,便产生溢出 机器数所表示的数值范围是由机器的字长决定,字长越长,所能表示的数的范围越大。
2.3.1.2 机器数的特点 (3).字长为n位的机器,它所能表示的机器整数X除0以外,最小是1,最大是2n-1,即其所表示的范围是:1≤X≤2n-1 (4).对于不带符号位的定点纯小数(即小数点位于机器数的最左边的数),字长为n位的机器所能表示的机器数X的范围是:2-n ≤X≤1-2-n
2.3.1.3 符号的数值化表示 用0表示正(“+”)号,用1表示负(“-”)号。 以字长为8位为例, +1101101和 -1101101 这两个数的表示如图所示:
2.3.2 原码、反码、补码和移码 2.3.2.⒈原码 原码表示方法:符号位为0表示正数,为1表示负数,数值部分用二进制数的绝对值表示的方法。通常用[X]原表示X的原码。
0,x 2n>x≥ 0 [x]原= 2nx 0 ≥x> 2n x = 1110 2.3.2.⒈1. 整数的原码 x为真值 n为整数的位数 如 x = +1110 [x]原= 0 , 1110 用 逗号将符号位 和数值位隔开 [x]原= 24 + 1110 = 1 , 1110 带符号的绝对值表示
x 1 >x≥ 0 [x]原= 1 – x 0 ≥x> 1 x = 0.1101 [x]原= 1 ( 0.1101) = 1 . 1101 x = 0.1000000 [x]原= 1 ( 0.1000000) = 1 . 1000000 2.3.2.⒈2. 小数的原码 x为真值 如 用 小数点将符号 位和数值位隔开 x = + 0.1101 [x]原= 0 . 1101 用 小数点将符号 位和数值位隔开 x =+ 0.1000000 [x]原= 0 . 1000000
2.3.2.1.3 原码表示特点 (1)优点:简单、直接 (2)缺点:原码做加法时,会出现以下问题: 能否只做加法?找到一个与负数等价的正数来代替这个负数,就可以使减法变加法
2.3.2.2 补码表示 2.3.2.2.1.补的概念 ①.时钟:以12为一个计数循环。 6-3(逆时针) 6+9 (顺时针) 可见模为12时-3可以用9代替 ②.角度:以360为一个计数循环 20-30 20+330 可见模为360时 -30和330是等价的 结论:1.一个负数加上 “模” 即得该负数的补 2.两个互为补数的数 它们绝对值之和即为 模 数
2.3.2.2.2. 补码的定义: 把某数X加上模数K,称为以K为模的X的补码。 [X]补=K+X 因此正数的补码是最高位为符号“0”,数值部分为该数本身;负数的补码是最高位为符号“1”,数值为用模数减去该数的绝对值。
0,x 2n>x≥ 0 [x]补= 2n+1 + x 0 >x≥ 2n(mod 2n+1) x = 1011000 [x]补= 27+1 +( 1011000 ) 1011000 整数补码 x为真值 n为整数的位数 如 x = +1010 [x]补= 0,1010 = 100000000 用 逗号将符号位 和数值位隔开 1,0101000
x 1 >x≥ 0 [x]补= 2 + x0 >x≥ 1(mod 2) x = 0.1100000 [x]补= 2+( 0.1100000 ) 0.1100000 用 小数点将符号位 和数值位隔开 小数补码 x为真值 如 x = + 0.1110 [x]补= 0.1110 = 10.0000000 1.0100000
2.3.2.2.3. 补码的快速计算方法 ①.正数的补码与其原码相同 ②.负数补码方法1: 负数补码可用 “除原码除符号位外,每位取反,末位加 1 得到” 例:若X原=1.0101,求X补 尾数变反: 1.1010 末位加1: +1 X补= 1.1011
③.负数补码方法2 符号位不变,尾数倒序第一个1及之前的0不变,其余各位变反 例: 若X原=1.110100,求X补 X补=1.001100
x = + 70 x = –70 x = 0.1110 x = 0.1110 x = 0.0000 x = 0.0000 x = 1.0000 x 1 >x≥ 0 [x]补= 2+ x 0>x≥–1(mod 2) [ 1]补= 2 + x = 10.0000 1.0000 = 1.0000 练习 求下列真值的补码 真值(字长8) [x]原[x]补 0, 1000110 = 1000110 0,1000110 = – 1000110 1, 0111010 1,1000110 0.1110 0.1110 1.0010 1.1110 0.0000 0.0000 0.0000 1.0000 1.0000 不能表示 由小数补码定义
2.3.2.3 反码表示 2.3.2.3.1 反码的定义: 正数的反码就是这个数本身,而负数的反码是符号位为1,数值部分等于其绝对值各位求反。
0,x 2n> x ≥ 0 [x]反= ( 2n+1 – 1) + x 0 ≥ x> 2n(mod 2n+1 1) x = 1101 [x]反= (24+1 1) 1101 = 11111 1101 用 逗号将符号位 和数值部分隔开 2.3.2.3.2 整数反码 x为真值 n为整数的位数 x= +1101 如 [x]反= 0,1101 = 1,0010
x 1 > x ≥ 0 [x]反= ( 2 – 2-n) + x 0 ≥ x> 1(mod 2 2-n) x = 0.1010 [x]反= (2 2-4) 0.1010 = 1.1111 0.1010 用 小数点将符号位 和数值位隔开 2.3.2.3.3 小数反码 x为真值 如 x = +0.1101 [x]反= 0.1101 = 1.0101
最高位为符号位,书写上用“,”(整数) 或“.”(小数)将数值部分和符号位隔开 • 对于负数 ,符号位为 1 ,其 数值部分 原码除符号位外每位取反末位加 1 补码 原码除符号位外每位取反 反码 2.3.2.4 三种机器数的小结 • 对于正数,原码 = 补码 = 反码
x = +21 大 x = –21 x = +31 大 x = –31 大 10101 + 100000 大 11111 + 100000 2.3.2.5 移码表示 补码表示很难直接判断其真值大小 十进制 二进制 补码 如 错 +10101 0,10101 – 10101 1,01011 +11111 0,11111 错 – 11111 1,00001 x + 25 +10101 + 100000 = 110101 正确 = 001011 +11111 + 100000 = 111111 正确 = 000001
0 2n 2n+1–1 [x]移码 真值 0 –2n 2n–1 2.3.2.5.1 移码的定义 [x]移= 2n + x(2n>x ≥ -2n) x为真值,n为 整数的位数 移码在数轴上的表示 如 x = 10100 [x]移= 25 + 10100 = 1,10100 用 逗号将符号位和数值位隔开 x = –10100 [x]移= 25– 10100 = 0,01100
2.3.2.5.2移码和补码的比较 设 x = +1100100 [x]移= 27 + 1100100 = 1,1100100 1 [x]补= 0,1100100 0 设 x = –1100100 [x]移= 27– 1100100 = 0,0011100 0 [x]补= 1,0011100 1 补码与移码只差一个符号位
[x] 移对应的 十进制整数 [x] 补 [x] 移 真值 x ( n=5 ) - 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 - 1 1 1 1 1 1 0 0 0 0 1 0 0 0 0 0 1 1 - 1 1 1 1 0 1 0 0 0 1 0 0 0 0 0 1 0 2 … … … … - 0 0 0 0 1 1 1 1 1 1 1 0 1 1 1 1 1 31 ± 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 32 + 0 0 0 0 1 0 0 0 0 0 1 1 0 0 0 0 1 33 + 0 0 0 1 0 0 0 0 0 1 0 1 0 0 0 1 0 34 … … … … + 1 1 1 1 0 0 1 1 1 1 0 1 1 1 1 1 0 62 + 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 63 2.3.2.5.3. 真值、补码和移码的对照表 - 1 0 0 0 0 0 0 0 0 0 0 0 ± 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 + 1 1 1 1 1 1 1 1 1 1 1
2.3.2.5.4. 移码的性质 ① 最高一位为符号位,其取值与原码、补码都相反,“1”表示正号,“0”表示负号。移码常用于表示浮点数的阶码,通常只使用整数。 ② 对移码一般只执行加减运算,在对两个浮点数进行乘除运算时,是尾数实现乘除运算,阶码执行加减运算。对阶码执行加减运算时,需要对得到的结果加以修正,修正量为2n-1,即要对符号位的结果取反后,才得到移码形式的结果。 ③ 在移码的表示中,0有惟一的编码,即[0]移=1000…0,而且,机器零的形式为 000…000。即当浮点数的阶码≤-2n-1时,不管尾数值的大小如何,都属于浮点数下溢,被认为其值为0,这时,移码表示的阶码值正好是每一位都为0的形式,与补码的0完全一致。这有利于简化机器中的判零线路。
2.3.3 数的定点表示和浮点表示 根据小数点位置的不同,机器数有定点数和浮点数。 ① 定点数表示方式:小数点的位置是固定不变的数称为定点数。若约定小数点固定于机器数最低位的右边,则机器数表示整数;若约定小数点固定于机器数数值位的左边符号位的右边,则机器数表示纯小数。 ② 浮点数表示方式:浮点数是一种指数形式的表示方式,其一般表示式为:X=2r·x。其中,r称为X的阶码,它指明了小数点的位置,表示数的大小;x称为X的尾数,表明了X的有效值。
2.3.3.1 定点数表示法 通常把小数点固定在数值部分的最高位之前,或把小数点固定在数值部分的最后面。前者将数表示成纯小数,后者把数表示成整数。如图所示。 对纯小数进行运算时,要用适当的比例因子进行折算,以免产生溢出,或过多损失精度。
2.3.3.1 浮点数表示法 浮点数是指在数的表示中,其小数点的位置是浮动的。任一个二进制数N可以表示成: N=2E·M 式中,M为数N的尾数或数码,E为指数,是数N的阶码,是一个二进制整数 浮点数分为阶码和尾数两个部分。
2.3.3.2. 浮点表示法 E 浮点数真值:N = + R ×M 浮点数机器格式: EfE1…Em MfM1…Mn 阶符 阶码 数符 尾数 R:阶码底,隐含约定。 E:阶码,为定点整数,补码或移码表示。 其位数决定数值范围; 阶符表示数的大小。 M:尾数,为定点小数,原码或补码表示。 其位数决定数的精度; 数符表示数的正负。 尾数规格化:1/2≤ M <1 最高有效位绝对值为1
2.3.3.3 浮点数的规格化 浮点数通常采用规格化的表示方法。所谓浮点数的规格化就是其尾数小数点后的第一位要为1,若不为1,就要用“左规” 或“右规”的方法使其为1。左规就是尾数向左移动(同时调整阶码),右规为向右移动,直至尾数的第一位为1或阶码为全0或最小值。 如: 210×0.1101,-210×0.1101就是规格化的浮点数; 而 211×0.0110,-211×0.0110是非规格化的浮点数。 思考:为什么需要规格化?
例:把非规格化的浮点数 N=211×0.0110规格化 解:把浮点数N的尾数向左移一位(或尾数的小数点右移一位),变成0.1100,同时,阶码递减1,得到N=210×0.1100,就是规格化的浮点数。
m m 2-1 2-1 -n 1-2 m -2 2.3.3.4. 浮点表示范围 阶符1位,阶码m位,补码表示,以2为底; 数符1位,尾数n位,补码表示,规格化。 阶码为最大数: 最小浮点数: 尾数为绝对值最大的负数: -1 阶码为最大数: 最大浮点数: 尾数为最大数: 阶码为最小数: 最小浮点正数: 尾数为最小正数: 2-1 例.某规格化浮点数用补码表示,其中阶码6位,含1位阶符;尾数10位,含1位数符。 表示范围: -231~ 231(1-2-9) 表示精度: 2-33
例1. 将 + 写成二进制定点数、浮点数及在定点机和浮点机中的机器数形式。其中数值部分均取 10 位,数符取1位,浮点数阶码取5位(含1位阶符)。 19 19 128 128 设x = + 练习: 解: 二进制形式 x = 0.0010011 定点表示 x = 0.0010011 000 浮点规格化形式 x = 0.1001100000×2- 10 定点机中 [x]原= [x]补= [x]反= 0.0010011000 浮点机中 [x]原= 1, 0010; 0. 1001100000 [x]补= 1, 1110; 0. 1001100000 [x]反= 1, 1101; 0. 1001100000
将 –58表示成二进制定点数和浮点数, 并写出它在定点机和浮点机中的三种机器数及阶码 为移码,尾数为补码的形式(其他要求同上例)。 例 2 解: 设x = –58 二进制形式 x = – 111010 x = – 111010 0000 定点表示 浮点规格化形式 x = – (0.1110100000) × 2110 定点机中 浮点机中 [x]原= 1, 0000111010 [x]原= 0, 0110; 1. 1110100000 [x]补= 1, 1111000110 [x]补= 0, 0110; 1. 0001100000 [x]反= 1, 1111000101 [x]反= 0, 0110; 1. 0001011111
2.3.3.5. 机器零 • 当浮点数 尾数为 0时,不论其阶码为何值,按机器零处理 • 当浮点数 阶码等于或小于它所表示的最小数时,不论尾数为何值,按机器零处理 如 m = 4 n = 10 当阶码和尾数都用补码表示时,机器零为 ×, × × × ×; 0. 0 0 …… 0 1, 0 0 0 0; ×.×× ……× (阶码 = -16) 当阶码用移码,尾数用补码表示时,机器零为 0, 0 0 0 0;0. 0 0 …… 0 有利于机器中“ 判 0 ” 电路的实现