2(1)为什么计算机内部采用二进制表示信息?既然计算机内部所有信息都用二进制表示,为什么还要用到十六进制和八进制数?
2(7)为什么计算机处理汉字时会涉及到不同的编码(如,输入码、内码、字模码)?说明这些编码中哪些是用二进制编码,哪些不是用二进制编码,为什么?
参***:(略)
3.实现下列各数的转换。
参***:
2)(101101.011)2 = 45.375)10 = 55.3) 8 = 2d.6) 16 = 0100 0101.0011 0111 0101) 8421
3)(0101 1001 0110.0011)8421 = 596.3)10 = 1001010100.01001100110011…) 2 = 254.4ccc…) 16
4. 假定机器数为8位(1位符号,7位数值),写出下列各二进制数的原码和补码表示。
参***:(后面添0)原码补码。
1.0溢出溢出。
1.0溢出1.0000000
5. 假定机器数为8位(1位符号,7位数值),写出下列各二进制数的补码和移码表示。
参***:(前面添0移码补码。
6. 已知 [x]补,求x
1)[x]补=1.11001112)[x]补=10000000
3)[x]补=0.10100104)[x]补=11010011
参***:1)[x]补=1.1100111x = 0.0011001b
2)[x]补=10000000x = 10000000b = 128
3)[x]补=0.1010010x = 0.101001b
4)[x]补=11010011x = 101101b = 45
7.假定一台32位字长的机器中带符号整数用补码表示,浮点数用ieee 754标准表示,寄存器r1和r2的内容分别为r1:0000 017ah,r2:ffff f895h。
不同指令对寄存器进行不同的操作,因而,不同指令执行时寄存器内容对应的真值不同。假定执行下列运算指令时,操作数为寄存器r1和r2的内容,则r1和r2中操作数的真值分别为多少?
1) 无符号数加法指令。
2) 带符号整数乘法指令。
3) 单精度浮点数减法指令。
参***:r1 = 0000 017ah = 0000 0000 0000 0000 0000 0001 0111 1010
r2 = ffff f895h = 1111 1111 1111 1111 1111 1000 1001 0101
1)对于无符号数加法指令,r1和r2中是操作数的无符号数表示,因此,其真值分别为r1:17ah, r2:ffff f895h。
(对应十进制分别为 294 965 397=232 –1899)
2)对于带符号整数乘法指令,r1和r2中是操作数的带符号整数补码表示,由最高位可知, r1为正数, r2为负数。r1的真值为+17ah=378, r2的真值为–111 0110 1011= –1899。
3)r1:符号位为0,表示其为正数,阶码为0000 0000,尾数部分为000 0000 0000 0001 0111 1010,故其为非规格化浮点数,指数为–126,尾数中没有隐藏的1,用十六进制表示尾数为+0.0000 0000 0000 0010 1111 0100=+0.
0002f4h,故r1表示的真值为+0.0002f4h × 2-126。
r2: 符号位为1,表示其为负数,阶码为1111 1111,尾数部分为111 1111 1111 1000 1001 0101,故其为全1阶码非0尾数,即是一个非数nan。
8.假定机器m的字长为32位,用补码表示带符号整数。下表第一列给出了在机器m上执行的c语言程序中的关系表达式,请参照已有的表栏内容完成表中后三栏内容的填写。
9.以下是一个c语言程序,用来计算一个数组a中每个元素的和。当参数len为0时,返回值应该是0,但是在机器上执行时,却发生了存储器访问异常。请问这是什么原因造成的,并说明程序应该如何修改。
1 float sum_elements(float a,unsigned len)
参***:参数len的类型是unsigned,所以,当len=0时,执行len-1的结果为11…1,是最大可表示的无符号数,因而,任何无符号数都比它小,使得循环体被不断执行,引起数组元素的访问越界,发生存储器访问异常。
只要将len声明为int型,或循环的测试条件改为i10. 设某浮点数格式为:
其中,移码的偏置常数为16,补码采用一位符号位,基数为4。
1) 用这种格式表示下列十进制数:+1.75,+19,–1/8。
2) 写出该格式浮点数的表示范围,并与12位定点补码整数表示范围比较。
参***:(假定采用0舍1入法进行舍入)
1) +1.75 = 1.11b = 0.
011100b× 41, 故阶码为1 +16 = 17 = 10001b, 尾数为+0.011100的补码, 即0.011100,所以+1.
75表示为0 10001 011100。
+19 = 10011b = 0.010011b× 43,故阶码为3 + 16 = 19 = 10011b, 尾数为0.010011,所以+19表示为0 10011 010011。
–1/8 = 0.125 = 0.001b = 0.
100000 × 4–1,阶码为 –1 + 16 = 15 = 01111b,尾数为– 0.100000的补码,即1.100000,所以–1/8表示为1 01111 100000。
2)该格式浮点数表示的范围如下。
正数最大值:0.111111b × 411111,即:0.333× 415 (≈230 ≈109)
正数最小值:0.000001b × 400000,即:0.001× 4–16 (≈2–34≈10–10)
负数最大值:–0.000001b × 400000,即:–0.001× 4–16
负数最小值:–1.000000b × 411111,即:–1.000× 415
因此,该格式浮点数的数量级在10–10~109之间。
12位定点补码整数的表示范围为:–211~+(211–1),即:–2048~2047
由此可见,定点数和浮点数的表示范围相差非常大。
11. 下列几种情况所能表示的数的范围是什么?
1) 16位无符号整数。
2) 16位原码定点小数。
3) 16位补码定点小数。
4) 16位补码定点整数。
5) 下述格式的浮点数(基数为2,移码的偏置常数为128)
参***:1)无符号整数:0~216–1。
2)原码定点小数:–(1–2–15) ~1–2–15)。
3)补码定点小数:–1 ~ 1–2–15)。
4)补码定点整数:–32768 ~ 32767。
5)浮点数:负数:– 1–2–7)×2+127 ~ 2–7×2–128。
正数:+2–135 ~ 1–2–7) ×2+127。
12. 以ieee 754单精度浮点数格式表示下列十进制数。
11b = 1.11b × 20, 故阶码为0+127=01111111b, 数符为0,尾数为1.110…0,小数点前为隐藏位,所以+1.
7表示为0 01111111 110 0000 0000 0000 0000 0000,用十六进制表示为3fe00000h。
+19 = 10011b = 1.0011b × 24,故阶码为4+127 = 10000011b, 数符为0,尾数为1.00110…0,所以+19表示为0 10000011 001 1000 0000 0000 0000 0000,用十六进制表示为41980000h。
第二章习题答案
第二章习题。1 a企业受到票据。借 应收票据 468000 贷 主营业务收入 400000 应交税费 应交增值税 销项税额 68000 票据到期收回票款。借 银行存款 468000 贷 应收票据 468000 年计提利息。借 应收利息 6240 贷 财务费用 6240 票据到期收回票款。借 银行存款...
第二章习题答案
第二章。1.在立方点阵中画出下面的点阵面和结点方向。2.将下面几个干涉面 属立方晶系 按面间距的大小排列。解 立方晶系的面间距公式为,所以带入数据得到按面间距大小排列为 100 110 00 10 11 21 030 130 123 3.在六方晶系中h k i。证明1 如图,任意截面交和于c,d 过...
第二章习题答案
1 直接寻址方式中,一般只指出操作数的偏移地址,那么,段地址如何确定?如果想要用。某个段寄存器给出段地址,指令中如何表示?举例说明。答 在直接寻址方式中,操作数默认的段地址是数据段,在段寄存器ds中。例如 mov cl,3120h 操作数地址为数据段内偏移地址为3120h的单元。如果想要用其它段寄存...