IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 山东大学树莓派提升计划二期项目(2)计算机系统原理实验一 -> 正文阅读

[C++知识库]山东大学树莓派提升计划二期项目(2)计算机系统原理实验一

前言

我选择的书籍是大名鼎鼎的《深入理解计算机系统》,作为本次项目实训的出题参考教程。

CS:APP 这本书自带很多 Lab,但是对于我来说这些实验的难度有点高,所以我首先自己做了一下 CS:APP Lab,然后参考其中出题的方式,自己出了一些题目,降低难度,以供同学使用。本文首先介绍实验一相关的题目,主体实验程序将在项目完成后,补充在本文末尾。

介绍

本实验包含 7 道与位级层面整数运算及操作的题目,使用 C++ 写成。Exp1.cc 文件中包含这 7 道题的空函数体,学生需要通过有限的 C++ 算术或逻辑操作符修改这些函数体,以实现函数功能。因为需要在树莓派上运行,实验将提供基于 Linux 环境本地检查功能,以方便学生进行检查。

本题目需要学生有 C++ 基础,其余涉及的 Make 等技术不做要求。

具体内容

本实验假设学生的机器有如下特征:

  1. 使用 32 位二进制补码存储数据
  2. 右移操作为算术右移
  3. 使用小端法存储数据

题目一,使用位级运算符号 NOT ~ 和 OR | 实现 x & y,本题目为 CS:APP Data Lab 中 bitXor 的简化版。

/*
 * 1. bitAnd
 *  使用位级运算符号 NOT ~ 和 OR | 实现 x & y
 *  测试点样例:bitAnd(0x69, 0x55) = 0x41
 *  可用操作符:~ |
 *  难度:1
 */
int bitAnd(int x, int y) {
    return 2;
}

题目二,返回当前值的相反数,本题为 CS:APP Data Lab 原题。

/*
 * 2. negate
 *  返回当前值的相反数
 *  测试点样例:negate(1) = -1
 *  可用操作符:! ~ & ^ | + << >>
 *  难度:1
 */
int negate(int x) {
    return 2;
}

题目三,无符号整数乘法,这道题是从 CS:APP 书上模拟出来的,只要认真看了课本应该没有什么难度。

/*
 * 3. multi14plus3
 *  给一个无符号整数 x,返回 x * 14 + 3
 *  测试点样例:multi14plus3(1) = 17
 *  可用操作符:! ~ & ^ | + << >>
 *  难度:1
 */
int multi14plus3(unsigned int x) {
    return 2;
}

题目四,从整数中取出字节,这道题目是 0-index 的。

/*
 * 4. getBytes
 *  从整数 x 中取出第 n 个字节
 *  测试点样例:getBytes(0x01234567, 0) = 0x67
 *             getBytes(0x284A4C32, 2) = 0x4A
 *  可用操作符:! ~ & ^ | + << >>
 *  难度:2
 */
int getBytes(int x, int n) {
    return 2;
}

题目五,判断当前值是否为 32 位补码整数最大值,即 2^31-1 = 2147483647,本题为 CS:APP Data Lab 原题。

/*
 * 5. isTmax
 *  当 x 为 32 位整数最大值时返回 1,否则返回 0
 *  测试点样例:isTmax(-1) = 0
 *             isTmax(0x7FFFFFFF) = 1
 *  可用操作符:! ~ & ^ | +
 *  难度:2
 */
int isTmax(int x) {
    return 2;
}

题目六,判断当前整数的所有奇数位比特是否为 1,本题目为 CS:APP Data Lab 中 allOddBits 的修改版。

/*
 * 6. allEvenBits
 *  当所有奇数位比特为 1 时返回 1,否则返回 0
 *  测试点样例:allEvenBits(0xFFFFFFFA) = 0
 *             allEvenBits(0xFFFFFFF4) = 1
 *  可用操作符:! ~ & ^ | + << >>
 *  难度:2
 */
 int allEvenBits(int x) {
    return 2;
}

题目七,判断是否 x ≥ y,本题目为 CS:APP Data Lab 中 isLessOrEqual 的修改版。

/*
 * 7. isGreaterOrEqual
 *  当 x >= y 时返回 1,否则返回 0
 *  测试点样例:isGreaterOrEqual(5, 4) = 1
 *             isGreaterOrEqual(-1, 3) = 0
 *  可用操作符:! ~ & ^ | + << >>
 *  难度:3
 */
int isGreaterOrEqual(int x, int y) {
    return 2;
}

检查程序搭建

可能会使用到的技术有 make,以及目前还不清楚的 C++ 测试技术,先挖一个坑,回头再来填。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-04-22 18:17:37  更:2022-04-22 18:22:08 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 21:55:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码