CSAPP 实验: 1.Datalab
文章目录
前言
实验资料链接
实验环境:我使用的环境是vscode + wsl,也可以使用虚拟机下载一个纯净的Linux系统,我更建议前一种做法因为更方便。安装第一种环境可以参考这篇文章。
实验步骤:
1.在提供网站内下载实验的handout文件到本地
2.代开vscode的远程服务启用WSL将本地文件复制一份到Linux目录下
3.使用tar xvf hand-out.tar指令解压文件
4.每次完成一个函数都使用make重新编译一下
5.利用 ./btest -f 函数名 测试函数是否正确
6.使用./dlc bits.c测试是否使用了非法字符
7.最后完成后用./driver.pl统计所有函数的得分情况汇总
1. 实验开始
1.1 bitXor
问题描述:
/*
* bitXor - x^y using only ~ and &
* Example: bitXor(4, 5) = 1
* Legal ops: ~ &
* Max ops: 14
* Rating: 1
*/
思路:本题是要实现异或,根据异或准则 A ⊕ B = ( A ‾ B ) ∪ ( A B ‾ ) A \oplus B = (\overline{A}B)\cup(A \overline{B}) A⊕B=(AB)∪(AB), 由于题目限制不能用或,可以想办法转换一下。考虑德摩根定律,记 f 1 = A ‾ B , f 2 = A B ‾ f1 = \overline{A}B, f2 =A \overline{B} f1=AB,f2=AB,则 A ⊕ B = f 1 ∪ f 2 = f 1 ∪ f 2 ‾ ‾ = f 1 ‾ f 2 ‾ ‾ A \oplus B = f1 \cup f2 =\overline{\overline{ f1 \cup f2}} =\overline{\overline{f1}\overline{f2}} A⊕B=f1∪f2=f1∪f2=f1