深入理解计算机系统(CSAPP) 实验详解:DataLab

本文详细介绍了CSAPP DataLab实验,包括实验目的、环境搭建、编写和测试代码的正确方法。重点讲解了如何使用位操作和逻辑运算实现bitXor、tmin、isTmax、allOddBits、isAsciiDigit和isLessOrEqual等题目,通过实例解析解题思路和代码实现。
摘要由CSDN通过智能技术生成

更新历史

  • 20200911开始做这个实验
  • 20200915更新文章-题目更新到isTmax
  • 20200918更新文章-题目更新到isAsciiDigit
  • 20200927更新文章-题目更新到isLessOrEqual
  • 停止更新

该实验的目的

该实验的目的是提升对计算机基础信息的理解和操作,例如位,整数,浮动,补码等等。

搭建环境

环境的搭建很简单,我们遵循以下几个步骤即可

  • 下载VM Box,并安装ubuntu
  • 然后我们在虚拟机中更新环境,在终端中执行一下命令
//更新apt软件源
apt-get update
//安装sudo
apt-get install sudo
//安装c/c++编译环境,build-essential软件包列表内包含libc6-dev、libc-dev、gcc、g++、make、dpkg等
sudo apt-get install build-essential
//补充gcc的完整环境(gcc-multilib)
sudo apt-get install gcc-multilib
//安装gdb
sudo apt-get install gdb
  • 然后我们就可以愉快的写代码了,你可以使用VS Code

如何使用正确的姿势写代码和测试

主要是一下几个步骤:

  1. 阅读bits.c的注释,然后在代码处修改它
  2. 命令行运行./dlc -e bits.c查看自己用了多少操作符,以及是否有代码风格问题
  3. 使用终端,执行make clean && make btest编译文件
  4. 使用终端,执行./btest,检查自己是否做对了
  5. 最终运行./driver.pl获得打分

下面是对主要文件的解释:

  • bits.c:这个是题目文件,也是我们写代码的地方,同时里面包含着各种要求,做题时需要仔细查看该题的限制。
  • btest.c:测试代码的工具,编译它(使用终端make btest)我们可以获得可执行文件,执行它会对你的代码进行测试,注意每次修改完代码之后都需要重新编译btest.c图1-0上面显示了你哪些题目通过测试了,哪些题目没有通过测试,同时也给出了没有通过测试的原因。
  • dlc(data lab compiler)

实验开始

采用以下框架来记录

  • 题解(题目解读)
  • 代码(包含注释)
  • 思路
  • 对于本次实验的思考和总结

bitXor

题解:
只用~和&实现一个异或门

//1
/* 
 * bitXor - x^y using only ~ and & 
 *   Example: bitXor(4, 5) = 1
 *   Legal ops: ~ &
 *   Max ops: 14
 *   Rating: 1
 */
int bitXor(int x, int y) {
   
  return 2;
}

思路:
在解这道题目的时候我首先想到的是在《编码》当中实现的异或门异或门是由三个逻辑门构成的,分别是与门或门非门构成的。如下图所示
在这里插入图片描述

而在这个题目当中,限制了我们使用或门,使得我们不得不自己使用与门非门组合成一个或门
然而要想实现一个或门我们就得先观察或门的关系表

Or 0 1
0 0 1
1 1 1

“对一个与门进行非操作,可以得到或门

这个其实是我对与门的关系表观察得到的,因为与门或门之间貌似是一个互补关系,或门为1的情况出现了三次,与门出现了一次,而且刚刚好与门出现的1的情况就在角落里,想象一下要是我可以旋转一下1值出现的地方,在进行非操作,那么不就可以得出一个或门了么。经过尝试,确实是可以的。演变的过程如下图
图图图图,后面补上

那么将这个过程转化为代码就是下面的样子

~(~x&~y)// | = ~(~x&~y)

然后再根据上面的分析,转化为代码

|&(~(x&y))
// 将|替换
(~(
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值