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

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

概述

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

指导

源码文件: lab1.tar

位谜题

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

位处理

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

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

2的补运算

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

检验你的结果

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

$ ./dlc bits.c

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

$ make

$ ./btest

详细内容见源码的README

使用指针

详细介绍见pointer.c文档

指针运算

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

使用指针处理数据

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

指针和地址区域

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

检验你的结果

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

$ make ptest

$ ./ptest

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值