数据表示编程作业_第1页
数据表示编程作业_第2页
数据表示编程作业_第3页
数据表示编程作业_第4页
数据表示编程作业_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、数据表示编程作业目录· 1 简介· 2 相关文件· 3 结果提交· 4 作业要求· 5 问题描述o 5.1位操作 o 5.2补码运算 o 5.3浮点数操作 · 6 检查你的代码 o 6.1 使用dlc检查函数实现代码是否符合作业要求中的编码规则o 6.2 使用btest检查函数实现代码的功能正确性· 7 建议与提示· 附录 作业步骤简要介绍1简介 本作业的目的是为更好地熟悉和掌握计算机中整数和浮点数的二进制编码表示。在作业中,你需要解开一系列编程“难题”使用有限类型和数量的运算操作实现一组给定功能的函数,在此过程中

2、你将加深对数据二进制编码表示的了解。 本作业为课外作业,占总评成绩15%。2相关文件作业所需要的代码和相关文件已放到linux系统home目录下的src-stu文件中,其中包含下列文件: · README 有关作业细节的说明文件,请在开始作业前仔细阅读 · bits.c 包含一组用于完成指定功能的函数的代码框架,需要你按要求补充完成其函数体代码并“作为作业结果提交”。函数的功能与实现要求详细说明在相应函数和文件首部的注释中(务必认真阅读和遵照说明完成作业)。 · bits.h 头文件 · btest.c 作业结果测试工具,用于检查作为作业结果的 bits

3、.c中函数实现是否满足作业的功能正确性要求。 · btest.h, decl.c, tests.c 生成btest程序的源文件 · dlc 作业结果检查工具,用于判断作为作业结果的 bits.c中函数实现是否满足作业的语法规则要求。 · Makefile 生成btest、fshow、ishow等工具的Make文件。 · ishow.c 整型数据表示查看工具 · fshow.c 浮点数据表示查看工具 3结果提交 请将完成函数体代码后的bits.c作为作业结果提交。 4作业要求 作业前请认真阅读本文档和bits.c中的代码及注释,然后根据要求相应完

4、成bits.c中的各函数代码。 作业中实现的函数代码必须满足下述基本条件(更多具体要求见函数的注释): · 除关于浮点数的函数实现外,只能使用顺序程序结构(不得使用循环或条件分支控制程序结构,例如if, do, while, for, switch等)。 · 仅能使用有限类型和数量的C语言算术和逻辑操作,例如如下的操作符,但注意每个题目可能有不同的可用操作符列表,详见具体函数说明。 ! & | + << >>· 不得使用超过8位表示的常量(即其值必须位于0,255中)。 · 不得使用任何形式的强制类型转换。 ·

5、不得使用除整型外的任何其它数据类型,如数组、结构、联合等。 · 不得定义和使用宏。 · 不得定义除已给定的框架函数外的其他函数,不得调用任何函数。 · 特定于浮点数操作函数的额外限制条件: o 可以使用循环和条件控制; o 可以使用整型和无符号整型常量及变量(取值不受0,255限制); o 不使用任何浮点数据类型、操作及常量。 上述作业要求的主要目的是使得你必须从二进制位的角度考虑数据,进而更清楚地理解数据的二进制表示。 5问题描述 你需要完成bits.c中下列函数功能,具体分为三大类:位操作、补码运算和浮点数操作。 5.1位操作下表列出了bits.c中一组操作和

6、测试位组的函数。其中,“级别”栏指出各函数的难度等级(对应于该函数的作业分值),“功能”栏给出函数应实现的输出(即功能),“约束条件”栏指出你的函数实现必须满足的编码规则(具体请查看bits.c中相应函数注释),“最多操作符数量”指出你的函数实现中允许使用的操作符(如|和)的最大数量。你也可参考tests.c中对应的测试函数来了解所需实现的功能,但是注意这些测试函数并不满足目标函数必须遵循的编码约束条件,只能用做关于目标函数正确行为的参考。 题目列表 级别 函数名 功能 约束条件 最多操作符数量 1 bitAnd(x,y) x & y 仅能使用|和 8 1 bitXor(x,y) x

7、y 仅能使用&和 14 1 thirdBits() 返回一个32位整型字,使其自最低有效位LSB起每三个位组的最低位置1,其它位置0(即.001001001) 仅能使用!,&,|,+,<<,>> 8 2 getByte(x,n) 从32位字x中提取第n字节(字节从LSB开始到MSB依次编号为0-3) 仅能使用!,&,|,+,<<,>> 6 3 logicalShift(x,n) 使用逻辑移位操作将x右移n位(假设0 <= n <= 31) 仅能使用,&,|,+,<<,>> 20

8、4 bang(x) !x 仅能使用,&,|,+,<<,>> 12 3 conditional(x,y,z) x ? y : z 仅能使用!,&,|,+,<<,>> 16 5.2补码运算 下表列出了bits.c中一组使用整数的补码表示的函数。可参考bits.c中注释说明和tests.c中对应的测试函数了解其更多具体信息。 题目列表 级别 函数名 功能 约束条件 最多操作符数量 2 fitsBits(x,n) 如果x可表示为一个n位补码整数则返回1,否则返回0 仅能使用!,&,|,+,<<,>> 15

9、2 sign(x) 返回1x是正数,0x为0,或者-1x是负数 仅能使用!,&,|,+,<<,>> 10 3 addOK(x,y) 如果计算x+y不发生溢出则返回1,否则返回0 仅能使用!,&,|,+,<<,>> 20 4 isPower2(x) 如果x是2的指数返回1,否则返回0 仅能使用!,&,|,+,<<,>> 20 5.3浮点数操作下表列出了bits.c中一组浮点数二进制表示的操作函数。可参考bits.c中注释说明和tests.c中对应的测试函数了解其更多具体信息。 注意float_neg和

10、float_twice函数的输入参数和返回结果(以及float_i2f函数的返回结果)均为unsigned int类型,但应作为单精度浮点数解释其32 bit二进制表示对应的值。 题目列表 级别 函数名 功能 约束条件 最多操作符数量 2 float_neg(f) 返回浮点数'-f'的二进制表示。当输入参数是NaN时,返回NaN 仅能使用任何整型/无符号整型操作,包括|,&&以及if,while控制结构 10 4 float_i2f(x) 返回整型输入x的强制浮点类型转换“(float) x”结果的二进制表示 仅能使用任何整型/无符号整型操作,包括|,&

11、&以及if,while控制结构 30 4 float_twice(f) 返回浮点数'2*f'的二进制表示。当输入参数是NaN时,返回NaN 仅能使用任何整型/无符号整型操作,包括|,&&以及if,while控制结构 30 6检查代码 如前所述,作业数据包中包含两个工具程序可帮助检查你的代码的正确性。 6.1使用dlc检查函数实现代码是否符合作业要求中的编码规则 完成bits.c后,调用如下命令进行检查: $ ./dlc bits.cdlc将返回错误信息如果它发现了错误,例如不允许使用的操作符、过多数量的操作符或者非顺序的代码结构。如果程序代码满足规则要求

12、,dlc将不输出任何提示。 使用-e选项调用dlc $ ./dlc -e bits.c可使dlc打印出每个函数使用的操作符数量。 输入“ ./dlc -help”可打印出dlc的可用命令行选项列表。 6.2使用btest检查函数实现代码的功能正确性 首先使用如下命令编译生成btest可执行程序: $ make如下调用btest命令检查bits.c中所有函数的功能正确性: $ ./btest注意每次修改bits.c后都必须使用make命令重新编译生成btest程序。 为方便依次检查测试每一函数的正确性,可如下在命令行使用“-f”选项跟上函数名,以要求btest只测试所指定的函数: $ ./bte

13、st -f bitXor进一步可如下使用“-1, -2, -3”等选项在函数名后输入特定的函数参数: $ ./btest -f bitXor -1 7 -2 0xf(README文件中有关于btest程序的使用说明) 7建议与提示 (1)作业将采用自动评分系统进行评分,抄袭或小改动都能够自动鉴别。(2)如果你的代码不能完全满足相应函数的操作符使用限制,你可以获得部分得分,但是往往这样的次优解总能找到改进它的方法,从而获得正确解答。 (3)在bits.c文件中不要包含<stdio.h>头文件,因为这样将给dlc程序造成困难并产生一些难以理解的错误信息。注意尽管未包含<stdio

14、.h>头文件,你仍然可以在bits.c中调用printf函数进行调试,gcc将打印警告信息但你可以忽略它们。 (4)注意dlc程序使用比gcc和C+更严格的C变量声明形式。在由“”包围的一个代码块中,所有变量声明必须出现在任何非声明语句之前。例如,针对下述代码,dlc将报错: int foo(int x) int a = x; a *= 3; /* Statement that is not a declaration */ int b = a; /* ERROR: Declaration not allowed here */你必须类似如下代码将变量声明放在最前: int foo(in

15、t x) int a = x; int b; a *= 3; b = a;附录 作业步骤简要介绍(1)将ubuntu虚拟机文件(建议VMware-workstation-full-9.0.0-812388.exe,可从网上下载,也可从教师出拷贝)复制到计算机的某个位置。(2)从教师出拷贝ubuntu虚拟机文件(该文件是安装在VMware-workstation上的linux操作系统,可以直接由VMware-workstation打开,我已经配置好了,可以直接使用。也可以从网上下载ubuntu-14.04-desktop-i386.iso,但需要自己安装,而且要从教师这里拷贝作业所需的各个文件)

16、到计算机的某个位置。(3)安装VMware-workstation-full-9.0.0-812388.exe,也可以安装别的版本,不过能不能用就要看运气了。该虚拟机的安装方法请问度娘。(4)双击桌面VMware Workstation图标,启动VMware Workstation。vmware虚拟机启动后,如图1所示。如果上一次ubuntu操作系统是不关闭的,则“Ubuntu”的下面显示的是“Power on this virtual machine”,由于我上次是将系统挂起,所以显示的是“Resume this virtual machine”,意为继续运行虚拟机。出现下面界面后,点“Po

17、wer on this virtual machine”或“Resume this virtual machine”打开或继续运行ubuntu操作系统。(5)启动ubuntu操作系统,启动后如图1所示。图1 ubuntu操作系统启动界面(6)输入密码:111111,按下回车键。弹出如图2所示界面。图2 ubuntu操作系统启动后的界面(7)按CTRL+ALT+T,弹出操作终端界面,如图3所示。图3 操作终端界面(8)在命令提示符$后面输入:pwd,然后按回车键,可以输出当前路径。在命令提示符$后面输入:ls,然后按回车键,列出当前目录的文件。如图4所示,当前路径为/home/zgj,zgj文件夹下有10个文件(夹)。其中,绿色位置为src-stu文件夹,该文件夹存放了本作业所

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论