)作业(第二章习题答案.第二章习题答案2(1)为什么计算机内部采用二进制表示信息?既然计算机内部所有信息都用二进制表示,为什么还要用到十六进制和八进制数?参考答案:(略)2(7)为什么计算机处理汉字时会涉及到不同的编码(如,输入码、内码、字模码)?说明这些编码中哪些是用二进制编码,哪些不是用二进制编码,为什么?参考答案:(略)3.实现下列各数的转换。
(1)(25.8125)= (?)= (?) = (?) 162108(2)(101101.011)= (?)= (?) = (?) = (?) 8421 101682(3)(0101 1001 0110.0011)= (?)= (?) = (?)28421 1016(4)(4E.C)= (?)= (?) 21016参考答案:(1)(25.8125)= (1 1001.1101)= (31.64) = 8 10 2(19.D) 16(2)(101101.011)= (45.375)= (55.3) = (2D.6)8 2 10= (0100 0101.0011 0111 0101) 842116(3)(0101 1001 0110.0011)= (596.3)= 10 8421(1001010100.01001100110011…) = (254.4CCC…)216(4)(4E.C)= (78.75)= (0100 1110.11) 210 164.假定机器数为8位(1位符号,7位数值),写出下列各二进制数的原码和补码表示。
+0.1001,–0.1001,+1.0,–1.0,+0.010100,–0.010100,+0,–0参考答案:(后面添0)原码补码+0.1001:0.1001000 0.1001000–0.1001: 1.1001000 1.0111000+1.0:溢出溢出–1.0:溢出 1.0000000+0.010100:0.01010000.0101000–0.010100: 1.0101000 1.1011000 +0:0.0000000 0.0000000–0: 1.0000000 0.00000005.假定机器数为8位(1位符号,7位数值),写出下列各二进制数的补码和移码表示。
.+1001,–1001,+1,–1,+10100,–10100,+0,–0参考答案:(前面添0)移码补码+1001:10001001 00001001 –1001:01110111 11110111+1:10000001 00000001–1:011111111 11111111+10100:10010100 00010100–10100:01101100 11101100+0:10000000 00000000–0:10000000 000000006.已知[x],求x补(1)[x]=1.1100111 (2)[x]补补=10000000[x])4 (=0.1010010 (3)[x] 补补=11010011参考答案:0.0011001B x = –=1.1100111 [x]1()补10000000B ==10000000 [x]2()x = –补128–.(3)[x]=0.1010010 x = +0.101001B 补(4)[x]=11010011 x = –101101B = –45 补7.假定一台32位字长的机器中带符号整数用补码表示,浮点数用IEEE 754标准表示,寄存器R1和R2的内容分别为R1:0000 017AH,R2:FFFFF895H。
不同指令对寄存器进行不同的操作,因而,不同指令执行时寄存器内容对应的真值不同。
假定执行下列运算指令时,操作数为寄存器R1和R2的内容,则R1和R2中操作数的真值分别为多少?(1)无符号数加法指令(2)带符号整数乘法指令(3)单精度浮点数减法指令参考答案:R1 = 0000 017AH = 0000 0000 0000 0000 00000001 0111 1010R2 = FFFF F895H = 1111 1111 1111 1111 11111000 1001 0101(1)对于无符号数加法指令,R1和R2中是操作数的无符号数表示,因此,其真值分别为R1:17AH, R2:FFFF F895H。
(对应十进制分别32 )1899–4 294 965 397=2、378为中是操和R22)对于带符号整数乘法指令,R1(作数的带符号整数补码表示,由最高位可知,的真值为为负数。
R1为正数,R2R1111 0110 1011= –+17AH=378, R2的真值为。
–18990000阶码为,表示其为正数,03)R1:符号位为(000 0000 0000 0001 0111 尾数部分为0000,,126指数为–1010,故其为非规格化浮点数,,用十六进制表示尾数为1尾数中没有隐藏的111100000010+0.00000000为真值表示的,0100=+0.0002F4H故R1-126 +0.0002F4H ×2。
1111 阶码为,表示其为负数,1R2: 符号位为111 1111 1111 1000 1001 ,尾数部分为1111尾数,即是一个阶码非00101,故其为全1 NaN。
非数位,用补码表示带符号整32M的字长为.假定机器8语言上执行的C数。
下表第一列给出了在机器M请参照已有的表栏内容完成程序中的关系表达式,表中后三栏内容的填写说关系表达式型果1 00…0B = 00…0B0 == 0U 无1 11…1B (––1 < 0 1) < 有0 00…0B (0)–1 < 0U无321 > 2147483647 11…1B (2–1) 有> 0 00…0B(0)无–2147483647 –1311 011…1B (2有–1) > 2147483647U > 311 100…0B (–22147483647 ––1 ) 有3112147483647 011…1B (2–> 1) < 无31100…0B(2(int)) 31011…1B (22147483648U –1) > 31100…0B (––2–2) 1 > 11…1B (–1) > –(unsigned) 1 > 11…10B (–2 –2)31)(>11…1B311…10B(29.以下是一个C语言程序,用来计算一个数组a中每个元素的和。
当参数len为0时,返回值应该是0,但是在机器上执行时,却发生了存储器访问异常。
请问这是什么原因造成的,并说明程序应该如何修改。
1 float sum_elements(float a[], unsigned len)2 {3 int i;4 float result = 0;56 for (i = 0; i <= len–1; i++)7 result += a[i];8 return result;9 }参考答案:时,len=0,所以,当参数len 的类型是unsigned,是最大可表示的无符11…1执行len-1的结果为号数,因而,任何无符号数都比它小,使得循环体发生存储引起数组元素的访问越界,被不断执行,器访问异常。
型,或循环的测试条件改为intlen声明为只要将。
i<len 设某浮点数格式为:10.阶1补6位位5,补码采用一位符号位,其中,移码的偏置常数为16 。
基数为4,+19+1.75,(1)用这种格式表示下列十进制数:。
–1/8位定写出该格式浮点数的表示范围,并与12(2)点补码整数表示范围比较。
入法进行舍入)舍1(假定采用参考答案:01故阶码,4+1.75 = +1.11B = )(1 0.011100B×+0.011100尾数为1 +16 = 17 = 10001B, 为的补码,1.1100B×= 4。
=00 =1 ×4130Q×41.30Q0 10001 011100。
即0.011100,所以+1.75表示为3故阶码为,+19 = +10011B = 0.010011B×4所,3 + 16 = 19 = 10011B, 尾数为0.010011 。
以+19表示为0 10011 010011 = –––1/8 = 0.125 = 0.001B –0.100000 ×1–,4数为–尾15 1 码阶为–+ 16 = = 01111B,1/8–,所以0.100000的补码,即1.100000 1 01111 100000表示为。
)该格式浮点数表示的范围如下。
(2111110.111111B ×正数最大值:40.333×,即:915 30 410(≈2≈)00000 0.001Q×4 正数最小值:0.000001B ×,即:10––16 –34)24(≈10≈00000:即,4 ×0.000001B –:值大最数负16––0.001×411111:,4即×数最小值:–1.000000B 负154–1.000×910–10~因此,该格式浮点数的数量级在10 之间。
11~位定点补码整数的表示范围为:–212112047~–2048+(2–1),即:定点数和浮点数的表示范围相差非由此可见,常大。
下列几种情况所能表示的数的范围是什么?11.16位无符号整数(1)16位原码定点小数(2)位补码定点小数)316(位补码定点整数)16(4,移码的偏置常下述格式的浮点数(基数为2(5)128)数为阶1位8位7参考答案:16。
1–2~0)无符号整数:1(.–15–15)2。
) ~–(2)原码定点小数:–(12+ (1––15)。
~+ (1–23()补码定点小数:–1(4)补码定点整数:–32768 ~+32767。
–7+127 –7–128。
×)×22~–2(5)浮点数:负数:–(1–2–135 –7+127 。
2) ×~(1–2正数:+212. 以IEEE 754单精度浮点数格式表示下列十进制数。
+1.75,+19,–1/8,258参考答案:0, 故阶码×2为1.11B +1.75 = +1.11B = 0+127=01111111B, 数符为0,尾数为1.110…0,小数点前为隐藏位,所以+1.7表示为0 01111111110 0000 0000 0000 0000 0000,用十六进制表示为3FE00000H。
4,故阶码为24+127 19 = +10011B =+1.0011B ×+= 10000011B, 数符为0,尾数为1.00110…0,所以+19表示为0 10000011 001 1000 0000 00000000 0000,用十六进制表示为41980000H。