《计算机系统概论》-第2章-习题答案

  1. 一个n-bit数可以表示多少个不同的二进制数?
    2n
  2. 如果采用二进制bit串来表示英语中的26个字母,至少需要多少个bit?如果还要区分大小写字母,又需要多少个bit?
    25=32 表示26个字母需要5个bit
    26=64 表示区分大小写的26的字母需要6个bit
  3. a.假设某班级有400个学生,如果我们为每个学生分配一个唯一的二进制bit串,那么至少需要多少个bit来表示所有的学生?
    29=512 表示400个学生,需要9个bit
    b.如果不再增加bit数,这个班最多还能增加多少个学生?
    512-400=112 还可以增加112个学生
  4. 给定n位(bit),它可以表示多少个不同的无符号整数?范围是多大?
    2n个无符号整数 范围是:0~2n-1
  5. 如果用5-bit二进制串表示数值,写出数值7和-7分别对应的反码、符号位码和补码表示方式。
    参考16页"补码"
    7:00111
    反码:00111
    符号位码:00111
    补码:00111
    -7:11001
    反码:11000
    符号位码:10111
    补码:11001
  6. 试用6-bit反码表示数值-32。(英文版本:“Write the 6-bit 2’s complement representation of -32.”,翻译错了吧,应该是要求用补码表示数值-32吧 )
    6-bit补码表示-32:100000
  7. 试列出4-bit二进制补码所能表示的所有整数。
    0000:0
    0001:1
    0010:2
    0011:3
    0100:4
    0101:5
    0110:6
    0111:7
    1000:-8
    1001:-7
    1010:-6
    1011:-5
    1100:-4
    1101:-3
    1110:-2
    1111 :-1
  8. a.8-bit二进制补码能表示的最大正整数是多少?分别写出十进制和二进制数。
    27-1
    127
    01111111
    b.8-bit二进制补码能表示的具有最大绝对值的负数是多少?分别写出十进制和二进制数。
    -27
    -128
    10000000
    c.n-bit二进制补码能表示的最大正整数是多少?
    2n-1-1
    d.n-bit二进制补码能表示的具有最大绝对值的负数是多少?
    -2n-1
  9. 如果用二进制补码方式表示摩尔常数6.0x1023,需要多少bit?
    80位bit:01111111000011100001000010101111010001111100000111001000000000000000000000000000
  10. 将下面的二进制补码转换为十进制数:
    a.1010:-6
    b.01011010:90
    c.11111110:-2
    d.0011100111010011:14803
  11. 将下面的十进制数转换为8-bit二进制补码:
    a.102:01100110
    b.64:01000000
    c.33:00100001
    d.-128:10000000
    e.127:01111111
  12. 二进制补码最后一位如果是0,那么这个数必然是偶数。如果二进制补码的最后两位都为0(例如二进制数01100),那么这种数有什么特点?
    是4的倍数,因为这个数是左移两位就是4倍
  13. 请将下面的二进制数改写为8-bit数,且不允许改变其原有数值。
    a.1010:11111010
    b.011001:00011001
    c.1111111000:11111000
    d.01:00000001
  14. 计算下列二进制加法,结果仍然表示为二进制数。
    a. 1011+0001:1100
    b. 0000+1010:1010
    c. 1100+0011:1111
    d. 0101+0110:01011
    e. 1111+0001:10000
  15. 在本章例2-5中,证明了一个二进制数左移1位等价于将该数值乘2。试问,如果将其右移1位,等价于什么操作呢?
    右移一位等价于除2
  16. 计算以下8-bit加法的结果,并分别写出结果所对应的二进制和十进制数。
    a. 7的反码加上-7的反码;11111111和-0
    b. 7的符号位表示加上-7的符号位表示;10001110和-14
    c. 7的补码加上-7的补码;00000000和0
  17. 计算以下二进制补码加法,并将结果转换为十进制形式。
    a. 01+1011:1100和-4
    b. 11+01010101:01010100和84
    c. 0101+110:0011和3
    d. 01+10:11和-1
  18. 计算以下无符号二进制数的加法,并将结果转换为十进制形式。
    a. 01+1011:1100和12
    b. 11+01010101:01011000和88
    c. 0101+110:1011和11
    d. 01+10:11和3
  19. 将十进制数-27分别转换为8-bit补码、16-bit补码和32-bit补码,并阐述符号扩展在这三种表达形式中的应用。
    11100101
    1111111111100101
    11111111111111111111111111100101
    符号扩展用于不同bit位的加法运算中
  20. 在以下4-bit补码运算中,其中哪些计算会产生溢出?请将操作数和计算结果分别改写为十进制方式予以验证。
    a. 110+0011:结果1,不会溢出(英文版中,原题是1100+0011:结果-1,没有溢出)
    b. 1100+0100:结果0,不会溢出
    c. 0111+0001:结果-8,溢出,因为两个正数相加结果为负数
    d. 1000-0001:结果7,溢出,因为两个负数相加结果为正数
    e. 0111+1001:结果0,不会溢出
  21. 试描述在什么情况下,两个补码相加将产生溢出。
    两个正数相加,或者两个负数相加
  22. 试给出两个16-bit补码相加产生溢出的例子。
    0111 1111 1111 1111 + 0000 0000 0000 0001
    1000 0000 0000 0000 - 0000 0000 0000 0001
  23. 试描述在什么情况下,两个无符号整数相加会产生溢出。
    bit位数固定的时候,两个整数相加超过当前取值范围时。
  24. 试给出两个16-bit无符号数相加产生溢出的例子。
    1111 1111 1111 1111 + 0000 0000 0000 0001
    1111 1111 1111 1110 + 0000 0000 0000 0010
  25. 试解释,为什么在补码方式下负数和正数相加不会产生溢出?
    因为正数和负数相加结果在取值范围之内。
  26. 将数值-64表示为二进制补码方式,并回答以下问题:
    a. 最少需要多少bit?7个
    b. 这些bit能够表示的最大正整数是多少(分别给出二进制和十进制数)?0111111和63
    c. 这些bit能够表示的最大无符号整数是多少(分别给出二进制和十进制数)?1111111和127
  27. LC-3是一个16-bit计算机,如果LC-3对补码0101010101010101和0011100111001111相加的结果为1000111100100100,请问该结果有问题吗?如果有,问题是什么?如果没有,为什么?
    有问题,因为两个正数相加结果为负数
  28. 试阐述逻辑AND运算在什么条件下输出为1。
    1 AND 1时结果为1
  29. 略。
  30. 求解下列逻辑运算结果,给出二进制表示。
    a. 01010111 AND 11010111:01010111
    b. 101 AND 110:100
    c. 11100000 AND 10110100:10100000
    d. 00011111 AND 10110100:00010100
    e. (0011 AND 0110) AND 1101:0000
    f. 0011 AND (0110 AND 1101):0000
  31. 试阐述逻辑OR运算在什么条件下输出为1。
    0 OR 1
    1 OR 0
    1 OR 1
  32. 略。
  33. 求解下列逻辑运算结果:
    a. 01010111 OR 11010111:11010111
    b. 101 OR 110:111
    c. 11100000 OR 10110100:11110100
    d. 00011111 OR 10110100:10111111
    e. (0101 OR 1100) OR 1101:1101
    f. 0101 OR (1100 OR 1101):1101
  34. 求解下列逻辑运算结果:
    a. NOT(1011) OR NOT(1100):0111
    b. NOT(1000 AND (1100 OR 0101)):0111
    c. NOT(NOT(1101)):1101
    d. (0110 OR 0000) AND 1111:0110
  35. 试阐述,在本章例2-11中,屏蔽字的作用是什么?
    不影响其他位的操作,通过屏蔽字仅对目标位进行操作。
  36. 略。
  37. 假设n、m、s都是4-bit补码数,且s是n和m相加的结果。如果只允许使用2.6节中介绍的逻辑运算,如何判断n和m相加的结果是否溢出?编写一个程序,输入n、m和s的值,如果n和m相加溢出,则输出1000;如果没有溢出,则输出0000。
    第一步:通过AND将n和m的左侧第一位bit提取出来,在通过XOR比较两者是否相同,如果不相同则表示正数和负数相加,此时肯定不会溢出。
    如果 (n AND 1000) XOR (m AND 1000) = 1000则返回0000表示不会溢出,否则继续判断
    第二步:左侧第一位bit相同,如果两数相加没有溢出,则s的左侧第一位bit应该和n、m相同,如果相同则表示没有溢出,如果不同,则表示溢出。
    如果(n AND 1000) XOR (s AND 1000) = 1000则返回0000表示没有溢出
    如果(n AND 1000) XOR (s AND 1000) = 0000则返回1000表示溢出
  38. 假设n、m、s都是4-bit无符号整数,s是n和m相加的结果。如果只允许使用2.6节中介绍的逻辑运算,如何判断n和m相加的结果是否溢出?编写一个程序,输入n、m和s的值,如果n和m相加溢出,则输出1000;如果没有溢出,则输出0000。
    第一步 (n OR m) AND 1000,如果为0000则代表肯定没有溢出直接返回,
    第二步 ((n OR m) AND 1000) XOR (s AND 1000)将结果直接返回
  39. 将以下十进制数转换成IEEE浮点数方式。
    a. 3.75:0 10000000 11100000000000000000000
    b. − 55 23 64 -55\frac{23}{64} 556423:1 10000100 10111010111000000000000
    c. 3.1415927:0 10000000 10010010000000000000000(近似值,可以往下计算更加精确的值)
    d. 64 000:0 10001110 11110100000000000000000
  40. 将以下IEEE浮点数转换为十进制数。
    a. 0 10000000 00000000000000000000000:2
    b. 1 10000011 0001000000000000000000:-17
    c. 0 11111111 00000000000000000000000:2128
    d. 1 10000000 10010000000000000000000: − 25 8 -\frac{25}{8} 825
  41. a. 32-bit IEEE浮点数能表示的最大数值是多少?2129
    b. 32-bit IEEE浮点数能表示的最小数值是多少?-2-149
  42. 一个程序员编写了一个两数求和的程序。但是运行后发现,5和8相加的结果是字符“m”,请分析造成这种奇怪现象的可能原因。
    可能将5和8当作字符来相加,因为5和8对应的ASCII码分别为53和56,相加刚好是109对应的ASCII码中的字母m。
  43. 将以下十六进制ASCII码改写为8-bit二进制ASCII码。
    a. x48656c6c6f21:Hello!
    b. x68454c4cf21:hELLO!
    c. x436f6d70757465727321:Computers!
    d. x4c432d32:LC-2
  44. 如果要将数字3的二进制表示转传成字符“3”的ASCII码,请问如何操作?那么,数字4到字符“4”的转换呢?试问,是否任意数字都可以通过这种操作来转换?
    可以通过3+47转换成字符“3”,只支持数字0~9的转换
  45. 将以下无符号数从二进制方式转换为十六进制方式。
    a. 1101 0001 1010 1111:xd1af
    b. 001 1111:x1f
    c. 1:x1
    d. 1110 1101 1011 0010:xedb2
  46. 将以下十六进制数转换为二进制形式。
    a. x10:0001 0000
    b. x801:1000 0000 0001
    c. xF731:1111 0111 0011 0001
    d. x0F1E2D:0000 1111 0001 1110 0010 1110
    e. xBCAD:1011 1100 1010 1101
  47. 将以下十六进制补码转换为十进制数。
    a. xF0:-16
    b. x7FF:211-1或2047
    c. x16:22
    d. x8000:-215或-32768
  48. 将以下十进制数转换为二进制补码及其十六进制表示。
    a. 256
    b. 111
    c. 123 456 789
    d. -44
  49. 下面是十六进制表示的补码之间的运算。请问,能否不将它们展开为二进制方式,而直接计算各式的值,结果仍然采用十六进制表示。
    a. x025B + x26DE
    b. x7D96 + xF0A0
    c. xA397 + xA35D
    d. x7D96 + x7412
    e. 对c和d的计算结果有什么补充吗?
  50. 下面是十六进制补码的逻辑运算。请问,能否不将它们展开为二进制方式,而直接计算各式的值,结果仍然采用十六进制表示。
    a. x5478 AND Xfdea(英文版是xFDEA)
    b. xABCD AND x1234
    c. NOT(NOT(xDEFA)) AND (NOT(xFFFF))
    d. x00FF XOR x325C
  51. 试写出以下数值的十六进制形式。
    a. 25 675
    b. 675.625,IEEE 754浮点数标准形式
    c. ASCII字符串:Hello
  52. 略。
  53. 略。
  54. 略。
  55. 我们已学过二进制(base-2)和十六进制(base-16)的数字表示方法。如果是无符号base-4方式,我们称之为四进制(quad)。在四进制中,每个数字的表示可以是0、1、2或3。试问:
    a. 3位四进制数能表达的最大无符号数值是多少(请用十进制回答)?
    b. n位四进制数能表达的最大无符号数值是多少(提示:答案必须以n为参数)?
    c. 计算无符号四进制数023和221相加的结果。
    d. 求出十进制数42的四进制表示。
    e. 求出将四进制数123.3转换为二进制方式的表示。
    f. 将四进制数123.3转换为IEEE浮点数表示。
    g. 假设一个黑箱函数,该黑箱的输入是一个m位四进制数,输出是一位四进制数。试问,该黑箱函数有多少种可能的实现(提示:排列组合,对于任意一个特定输入,有4种可能输出)?
  56. 试定义一种新的8-bit浮点数各式,符号位1-bit、指数字段4-bit(校正值为7,即bias=7)、尾数3-bit。试问,十六进制数xE5转换为该8-bit浮点数的结果是什么?最后数值(十进制)是多少?

参考:https://github.com/QSCTech/zju-icicles/blob/master/计算机系统概论/作业答案/ch02_complete.pdf

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值