前言
我选择的书籍是大名鼎鼎的《深入理解计算机系统》,作为本次项目实训的出题参考教程。
CS:APP 这本书自带很多 Lab,但是对于我来说这些实验的难度有点高,所以我首先自己做了一下 CS:APP Lab,然后参考其中出题的方式,自己出了一些题目,降低难度,以供同学使用。本文首先介绍实验一相关的题目,主体实验程序将在项目完成后,补充在本文末尾。
介绍
本实验包含 7 道与位级层面整数运算及操作的题目,使用 C++ 写成。Exp1.cc 文件中包含这 7 道题的空函数体,学生需要通过有限的 C++ 算术或逻辑操作符修改这些函数体,以实现函数功能。因为需要在树莓派上运行,实验将提供基于 Linux 环境本地检查功能,以方便学生进行检查。
本题目需要学生有 C++ 基础,其余涉及的 Make 等技术不做要求。
具体内容
本实验假设学生的机器有如下特征:
- 使用 32 位二进制补码存储数据
- 右移操作为算术右移
- 使用小端法存储数据
题目一,使用位级运算符号 NOT ~ 和 OR | 实现 x & y,本题目为 CS:APP Data Lab 中 bitXor 的简化版。
int bitAnd(int x, int y) {
return 2;
}
题目二,返回当前值的相反数,本题为 CS:APP Data Lab 原题。
int negate(int x) {
return 2;
}
题目三,无符号整数乘法,这道题是从 CS:APP 书上模拟出来的,只要认真看了课本应该没有什么难度。
int multi14plus3(unsigned int x) {
return 2;
}
题目四,从整数中取出字节,这道题目是 0-index 的。
int getBytes(int x, int n) {
return 2;
}
题目五,判断当前值是否为 32 位补码整数最大值,即 2^31-1 = 2147483647,本题为 CS:APP Data Lab 原题。
int isTmax(int x) {
return 2;
}
题目六,判断当前整数的所有奇数位比特是否为 1,本题目为 CS:APP Data Lab 中 allOddBits 的修改版。
int allEvenBits(int x) {
return 2;
}
题目七,判断是否 x ≥ y,本题目为 CS:APP Data Lab 中 isLessOrEqual 的修改版。
int isGreaterOrEqual(int x, int y) {
return 2;
}
检查程序搭建
可能会使用到的技术有 make,以及目前还不清楚的 C++ 测试技术,先挖一个坑,回头再来填。
|