本次实验精选了一些有趣的代码,巩固此阶段学习的位运算(bitwise)和整数的表示(integer representation)。另外,实验也会补充一些开发工具的使用和调试练习,目的是为了便于大家更好地完成作业。

本阶段的话题是熟练掌握位运算、位掩码、以及涉及到的调试命令,并能够将无符号整数表示为二进制多项式,将有符号整数表示为二进制补码。以下一些问题,旨在验证你的理解并让你进一步思考这些概念:

  • 考虑将整数的大小四舍五入到 2 的幂(例如,3 舍入到 4、4 到 4、5 到 8,对于负数:-3 舍入到 -4、-4 到 -4,依此类推)。正数的位模式与舍入后的值的位模式有何不同?负整数的情况呢?
  • 假设一个位运算表达式,可以将 unsigned int 值的高 N 位清零。请问这个表达式如何用算术方法来计算?
  • gdb 下运行的程序时,什么时候向程序提供命令行参数:启动 gdb 时,还是从 gdb 内部运行程序时?
  • CSAPP 第 2 章提供了许多优秀的练习题和答案,可以进一步练习!

学习目标

  • 复习位(bit)、位运算(bitwise)、位掩码(bitmask)等概念
  • 阅读并分析涉及位和整型运算的代码
  • 进一步练习在 Linux 远程开发环境下编辑、编译、测试、调试的工作流程

初始代码

你的个人用户目录下应该已经有 cs102 这个文件夹了,通过下面的命令拷贝初始代码到该目录中:

cp -r /home/cs102-shared/labs/lab1 ~/cs102