CSAPP 第2章 练习题2.1~2.6

练习题2.1 完成下面的数字转换:

A. 将0x39A7F8转换位二进制

B. 将二进制1100100101111011转换为十六进制

C. 将0xD5E4C转换二进制

D. 将二进制1001101110011110110101转换为十六进制

解: A. 0011-1001-1010-0111-1111-1000         B. 0xC97B

        C. 1101-0101-1110-0100-1100                  D. 0x26E7B5

练习题2.2 填写下表中的空白项,给出2的不同次幂的二进制和十六进制表示:

练习题2.3 一个字节可以用两个十六进制数来表示。填写下表中缺失的项,给出不同字节模式的十进制,二进制和十六进制值:

解:

练习题2.4 不将数字转换为十进制或者二进制,试着解答下面的算术题,答案要用十六进制表示。

A. 0x503C + 0x8 =  ______________

B. 0x503C - 0x40 = ______________

C. 0x503C + 64    = ______________

D. 0x50EA - 0x503C = ____________

解:

A. 0x5044       B. 0x4F9C     C. 0x507C          D. 0xAF

练习题2.5 思考下面对show_bytes的三次调用:

int val = 0x87654321;
byte_pointer valp = (byte_pointer) &val;
show_bytes(valp, 1);    // A.
show_bytes(valp, 2);    // B.
show_bytes(valp, 3);    // C.

指出在小端法机器和大端法机器上,每次调用的输出值。

A.  小端法:________       大端法:________

B.  小端法:________       大端法:________

C.  小端法:________       大端法:________

解:A. 小端法:21                大端法:87

       B. 小端法:21 43           大端法:87 65

       C. 小端法:21 43 65      大端法:87 65 43

        这是基于qemu模拟器的实现

练习题2.6 使用show_int和show_float,我们确定整数3510593的十六进制表示为0x00359141,而浮点数3510593.0的十六进制表示为0x4A564504。

A. 写出这两个十六进制值的二进制表示。

B. 移动这两个二进制串的相对位置,使得它们匹配的位数最多。有多少位相匹配呢?

C. 串中的什么部分不相匹配?

解:

A.   0x00359141       0000 0000 0011 0101 1001 0001 0100 0001

       0x4A56504        0100 1010 0101 0110 0100 0101 0000 0100

B.  0000 0000 0011 0101 1001 0001 0100 0001

        0100 1010 0  1 0101 1001 0001 0100 0001  00

共有21位相匹配

C.  我们发现除了最高有效位1,整数的所有位都嵌在浮点数中。这正好也是书中示例的情况。另外,浮点数有一些非零的高位不与整数中的高位相匹配

练习题2.7 下面对show_bytes的调用将输出什么结果?

const char *s = "abcdef";
show_bytes((byte_pointer) s, strlens(s));

 注意字母 ‘a' ~ 'z' 的ASCII码为0x61~0x7A

解:输出 61 62 63 64 65 66(库函数strlen不计算终止的空白符,所以show_bytes只打印到字符 ’f' )

猜你喜欢

转载自blog.csdn.net/TanguanhuaD/article/details/88959490