深入理解计算机系统第二版习题解答CSAPP 2.11
在2.10中的inplace_swap函数的基础上,你决定写一段代码,实现将一个数组中的元素两端依次对调,你写出下面这个函数:
void reverse_array(int a[], int cnt)
{
int first, last;
for(first = , last = cnt - ;
first <= last;
first ++, last --)
{
inplace_swap(&a[first], &a[last]);
}
}
当对一个数组包含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 |
| 第一步 | p^p=0 | |
| 第二步 | ||
| 第三步 |
C. 将第5行代码改为如下即可。
first < last
深入理解计算机系统第二版习题解答CSAPP 2.11的更多相关文章
- 深入理解计算机系统第二版习题解答CSAPP 2.12
对于下面的值,写出变量x的C语言表达式.代码应该对任何字长w≥8都能工作.我们给出当x=0x87654321以及w=32时表达式的结果,仅供参考. A.x的最低有效字节,其他位均为0.[0x00000 ...
- 深入理解计算机系统第二版习题解答CSAPP 2.20
T2Uw(w)=x, x≥0时 T2Uw(w)=x+2w, x<0时 利用上面的公式,重新计算2.19的问题.
- 深入理解计算机系统第二版习题解答CSAPP 2.19
在2.17的基础上完成下表: x 十六进制 T2U(x) -8 0x8 -3 0xD -2 0xE -1 0xF 0 0x0 5 0x5
- 深入理解计算机系统第二版习题解答CSAPP 2.18
将32位补码表示的数转换为10进制数. 32位补码 十进制 0x1b8 0x14 0xFFFFFE58 -424 0xFFFFFE74 -396 0x44 0xFFFFFEC8 -312 0x10 0 ...
- 深入理解计算机系统第二版习题解答CSAPP 2.17
假设w=4,我们能给每个可能的十六进制数字赋予一个数值,假设用一个无符号或者补码表示.完成下表: x 无符号(B2U(x)) 补码(B2T(x)) 十六进制 二进制 0xE 1110 14 -2 0x ...
- 深入理解计算机系统第二版习题解答CSAPP 2.16
填写下表,说明不同移位运算对单字节数的影响. x x<<3 x>>2(逻辑) x>>2(算术) 十六进制 二进制 二进制 十六进制 二进制 十六进制 二进制 十六进 ...
- 深入理解计算机系统第二版习题解答CSAPP 2.15
只使用位级运算和逻辑运算,编写一个C表达式,它等价于x==y.换句话说,当x和y相等时它将返回1,否则就返回0. !(x ^ y)
- 深入理解计算机系统第二版习题解答CSAPP 2.14
假设x和y的字节值分别为0x66和0x39.填写下表,指明各个C表达式的字节值. 0x66 = 0110 0110(B) 0x39 = 0011 1001(B) 表达式 值 x & y 0x2 ...
- 深入理解计算机系统第二版习题解答CSAPP 2.13
从20世纪70年代末到80年代末,Digital Equipment的VAX计算机是一种非常流行的机型.它没有布尔运算AND和OR指令,只有bis(位设置)和bic(位清除)这两种指令.两种指令的输入 ...
随机推荐
- Zabbix探索:网络设备监控2
在实现第一部分的简单监控的时候,在设置数据类型的时候设置成为了整数,结果: icmpping:这个没问题,只有0和1: icmppingloss:这个有问题,是百分比,其实是浮点数,单位是%: icm ...
- Hadoop安装教程_单机/伪分布式配置
环境 本教程使用 CentOS 6.4 32位 作为系统环境,请自行安装系统(可参考使用VirtualBox安装CentOS).如果用的是 Ubuntu 系统,请查看相应的 Ubuntu安装Hadoo ...
- MFC常用类
CString CStringT 操作可变长度字符串的模板类CStringT有三个实例:CString.CStringA和CStringW,它们分别提供对TCHAR.char和wchar_t字符类型的 ...
- 2015长春 HDU 5534 Partial Tree
题意:有n个结点,n-1条边,现在要把这n个结点连成一棵树,给定了f(i),表示度为i的结点的价值是f(i).现在问如何连能够使得Σf(i)的值最大. 思路:每个点至少一个度,所以可分配的度数为n-2 ...
- java web工程发布以及解决tomcat闪退
1.tomcat闪退 a.环境变量错误 startup.bat最后假如PAUSE进入调试状态,双击startup.bat,可以看到错误,根据错误提示设置相应的环境变量,JAVA_HOME等. b.ec ...
- jqgrid在页面出来竖型滚动条自动调整列宽
在项目中使用jqgrid的时候,需要设置在页面竖型滚动条出来的时候,列宽进行调整 1. 判断jqgrid的宽度是否和页面的宽度不一致(判断滚动条是否出来) 2. 调整jqgrid的列宽,因为jqgri ...
- python的资料
python2.7的类库:https://docs.python.org/2.7/library/index.html
- Cookie与Session的初探
1.Cookie 2.Session 每当一个新的请求来时,asp.net会根据浏览器有没传来SessionId(一般用Cookie传过来的,也可以用url传),来判断是新创建一个session还是根 ...
- jquery timepicker
<div class="form-group row"> <div class="col-lg-2 control-label l-pd25" ...
- React-native 中的触摸响应功能
我们在做APP的时候,与桌面应用系统不同的是触摸响应. web页面对触摸响应的支持和原生的APP有着很大的差异. 基本用法 componentWillMount: function() { this. ...