深入理解计算机系统 CSAPP lab:Data Lab

avatar
作者
筋斗云
阅读量:0

实验资源下载地址:csapp.cs.cmu.edu/3e/labs.html

使用前先详细阅读资源内的readme

64位linux可能用到的命令:

su root

 获取最高权限

apt install gcc-multilib

 项目是32位的要安装这个才能运行

第一题:

int bitXor(int x, int y) { 	   return (~(~x&~y))&(~(x&y)); }

推到过程:

目标: x       ^    y      = 0110

             1100 ^ 1010 = 0110

~x = 0011

~y = 0101

~x&y = 0010

x&~y = 0100

0010|0100=0110得到目标,但是我们不可以用|运算

转换思路,我们尝试获得1001然后取反就可以获得目标0110了。

问题变成如何通过1100和1010获得1001

x&y=1000

~x & ~y =0001

此时 1000|0001=1001 但是我们不能用|运算好像又回到了刚才的问题了。

此时我们将这两个数取反 0111&1110=0110

刚好得到最初的目标0110 问题解决。

这里我们不是按逻辑推导出来的,把此算法放入程序中测试,显示通过。

只要结果对就行了,这里我们忽略得到结果的过程。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!