深入理解计算机系统第二版习题解答CSAPP 2.11

在2.10中的inplace_swap函数的基础上,你决定写一段代码,实现将一个数组中的元素两端依次对调,你写出下面这个函数:

 1 void reverse_array(int a[], int cnt)
 2 {
 3     int first, last;
 4     for(first = 0, last = cnt - 1;
 5          first <= last;
 6          first ++, last --)
 7     {
 8         inplace_swap(&a[first], &a[last]);
 9     }
10 }

当对一个数组包含1、2、3、4时,得到预期的结果4、3、2、1。不过,当一个包含元素为1、2、3、4、5的数组使用这个函数时,你会很惊奇看到结果为5、4、0、2、1。对于偶数个元素的数组正常工作,奇数个元素的数组会把中间元素设置为0。

A.对于一个长度为奇数的数组,长度为cnt = 2k + 1,函数reverse_array最后一次循环中,变量first和last的值分别是什么?

B.为什么这时调用函数inplace_swap会将数组元素设置为0?

C.对reverse_array的代码做哪些简单改动就能消除这个问题?

解答:

A. first和last都为k。

B. 最后一次循环时。假设a[k]为p。

步骤 *x *y
初始 a[k]=p a[k]=p
第一步 0 p^p=0
第二步 0 0
第三步 0 0

C. 将第5行代码改为如下即可。

1 first < last
时间: 2024-10-14 01:33:19

深入理解计算机系统第二版习题解答CSAPP 2.11的相关文章

深入理解计算机系统第二版习题解答CSAPP 2.12

对于下面的值,写出变量x的C语言表达式.代码应该对任何字长w≥8都能工作.我们给出当x=0x87654321以及w=32时表达式的结果,仅供参考. A.x的最低有效字节,其他位均为0.[0x00000021]. B.除了x的最低有效字节外,其他位都取补,最低有效字节保持不变.[0x789ABC21]. C.x的最低有效字节设置成全1,其他字节都保持不变.[0x876543FF]. 解答: A. x & 0xFF B. ~(x ^ 0xFF)或者(~x) ^ 0xFF C. x | 0xFF

深入理解计算机系统第二版习题解答CSAPP 2.13

从20世纪70年代末到80年代末,Digital Equipment的VAX计算机是一种非常流行的机型.它没有布尔运算AND和OR指令,只有bis(位设置)和bic(位清除)这两种指令.两种指令的输入都是一个数据字x和一个掩码字m.它们生成一个结果z,z是由根据掩码m的位来修改x的位得到的.使用bis指令,这种修改就是在m为1的每个位置上,将z对应的位设置为1.使用bic指令,这种修改就是在m为1的每个位置,将z对应的位设置为0. 只使用这两个函数实现C语言的按位|和^运算. 1 int bis

深入理解计算机系统第二版习题解答CSAPP 2.6

使用打印字节的方式可以知道十进制数12345的十六进制为0x00003039,十进制浮点数12345.0的十六进制为0x4640E400. 转换为二进制为 1 /* 2 0 0 0 0 3 0 3 9 3 00000000000000000011000000111001 4 ************* 5 4 6 4 0 E 4 0 0 6 01000110010000001110010000000000 7 8 */ 移动后有13位匹配. 已知十进制数3510593的十六进制为0x003591

深入理解计算机系统第二版习题解答CSAPP 2.18

将32位补码表示的数转换为10进制数. 32位补码 十进制 0x1b8 440 0x14 20 0xFFFFFE58 -424 0xFFFFFE74 -396 0x44 68 0xFFFFFEC8 -312 0x10 16 0xC 12 0xFFFFFEEC -276 0x20 32

深入理解计算机系统第二版习题解答CSAPP 2.19

在2.17的基础上完成下表: x 十六进制 T2U(x) -8 0x8 8 -3 0xD 13 -2 0xE 14 -1 0xF 15 0 0x0 0 5 0x5 5

深入理解计算机系统第二版习题解答CSAPP 2.17

假设w=4,我们能给每个可能的十六进制数字赋予一个数值,假设用一个无符号或者补码表示.完成下表: x 无符号(B2U(x)) 补码(B2T(x)) 十六进制 二进制 0xE 1110 14 -2 0x0 0000 0 0 0x5 0101 5 5 0x8 1000 8 -8 0xD 1101 13 -3 0xF 1111 15 -1

深入理解计算机系统第二版习题解答CSAPP 2.16

填写下表,说明不同移位运算对单字节数的影响. x x<<3 x>>2(逻辑) x>>2(算术) 十六进制 二进制 二进制 十六进制 二进制 十六进制 二进制 十六进制 0xC3 1100 0011 0001 1000 0x18 0011 0000 0x30 1111 0000 0xF0 0x75 0111 0101 1010 1000 0xA8 0001 1101 0x1D 0001 1101 0x1D 0x87 1000 0111 0011 1000 0x38 001

深入理解计算机系统第二版习题解答CSAPP 2.1

A.将0x39A7F8转换为二进制. 0011 1001  1010 0111  1111 1000 B.将二进制1100 1001 0111 1011转换为十六进制. 0xC97B C.将0xD5E4C转换为二进制. 0000 1101  0101 1110  0100 1100 D.将二进制10 0110 1110 0111 1011 0101转换为十六进制. 0x26D7B5

深入理解计算机系统第二版习题解答CSAPP 2.2

填写空白项. n 2n(十进制) 2n(十六进制) 9 512 0x200 19 524288 0x80000 14 16384 0x4000 16 65536 0x10000 17 131072 0x20000 5 32 0x20 7 128 0x80