CSE351 Lab1:使用C语言进行位操作

Lab1:使用C语言进行位操作

概述

本任务的目的是为了使大家更加熟悉以位级呈现的数据。你会依靠解决一系列谜题来达到这一目的。大多数的谜题看似是有意人为的,但实际上位操作在密码学,数据编码,实现文件格式(如MP3)等非常有帮助。在你解决这些问题的过程中,你将会渐渐熟悉位级别的数据呈现,而且很可能会感受到某种乐趣。同时你也要做某些基本的指针处理以及指针算数。

指导

源码文件: lab1.tar

位谜题

这一节将描述你将要在bits.c内解决的谜题。更完整的文档可在源文件内找到。

位处理

下列表格是你将完成的一系列函数,其难易程度反映在其分值多少中。
更多内容详见源码。

分值 函数名 描述 提示
1 bitAnd 实现逻辑与 德摩根律
1 bitXor 实现异或 德摩根律
1 thirdBits 返回一个int每3位置1 返回值是32位的
2 getByte 提取x的第n位 byte是8位宽的
3 logicalShift x右移n位 ‘逻辑’移位
3 invert 将p位开始的n位反相 使用mask
4 bang 实现!x不用! 0为假,其他为真
附加题
3 conditional x ? y : z

2的补运算

分值 函数名 描述 提示
2 fitsBits 判断x是否能表示为n位补数 -1=~0
2 sign 正:1 零:0 负:-1 位移
3 addOk 确定是否溢出 考虑正负加法时的情形
附加题
4 isPower2 判断x是否为2的幂

检验你的结果

在源文件包中已有两个工具来检验你答案的正确性
dlc是一个用来检验结果是否符合既定规则的程序。用法为

$ ./dlc bits.c

btest是一个用来检查代码功能正确性的程序,用法为

$ make

$ ./btest

详细内容见源码的README

使用指针

详细介绍见pointer.c文档

指针运算

pointer.c 的头三个函数要求你计算不同数据元素的大小(bytes)。

使用指针处理数据

changeValue 函数要求你只用数组开始地址来改变数组内一元素的值。在源码内不能使用[]!

指针和地址区域

最后两个函数要求你确定指针是否位于特定的地址区域。

检验你的结果

对pointer.c 我们也有一个简单的测试程序:ptest.c,使用如下

$ make ptest

$ ./ptest

你可能感兴趣的:(计算机基础知识学习,c语言,数据,指针)