华中科技大学计算机系统基础实验报告Word格式文档下载.docx

上传人:b****2 文档编号:14177208 上传时间:2022-10-19 格式:DOCX 页数:32 大小:1.60MB
下载 相关 举报
华中科技大学计算机系统基础实验报告Word格式文档下载.docx_第1页
第1页 / 共32页
华中科技大学计算机系统基础实验报告Word格式文档下载.docx_第2页
第2页 / 共32页
华中科技大学计算机系统基础实验报告Word格式文档下载.docx_第3页
第3页 / 共32页
华中科技大学计算机系统基础实验报告Word格式文档下载.docx_第4页
第4页 / 共32页
华中科技大学计算机系统基础实验报告Word格式文档下载.docx_第5页
第5页 / 共32页
点击查看更多>>
下载资源
资源描述

华中科技大学计算机系统基础实验报告Word格式文档下载.docx

《华中科技大学计算机系统基础实验报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《华中科技大学计算机系统基础实验报告Word格式文档下载.docx(32页珍藏版)》请在冰豆网上搜索。

华中科技大学计算机系统基础实验报告Word格式文档下载.docx

实验总结 30

30

数据表示

1.1实验概述

本实验的目的是更好地熟悉和掌握计算机中整数和浮点数的二进制编码表示。

实验中,你需要解开一系列编程“难题”——使用有限类型和数量的运算操作实现一组给定功能的函数,在此过程中你将加深对数据二进制编码表示的了解。

实验语言:

c;

实验环境:

linux

1.2实验内容

需要完成bits.c中下列函数功能,具体分为三大类:

位操作、补码运算和浮点数操作。

1.3实验设计

源码如下:

/*

*lsbZero-set0totheleastsignificantbitofx

*Example:

lsbZero(0x87654321)=0x87654320

*Legalops:

!

~&

^|+<

<

>

>

*Maxops:

5

*Rating:

1

*/

intlsbZero(intx){

//x右移一位再左移一位实现把最低有效位置0

x=x>

1;

x=x<

returnx;

}

*byteNot-bit-inversiontobytenfromwordx

*Bytesnumberedfrom0(LSB)to3(MSB)

*Examples:

getByteNot(0x12345678,1)=0x1234A978

6

2

intbyteNot(intx,intn){

//x第n个字节每位都和1异或实现取反

inty=0xff;

n=n<

3;

y=y<

n;

x=(x^y);

*byteXor-comparethenthbyteofxandy,ifitissame,return0,ifnot,return1

*example:

byteXor(0x12345678,0x87654321,1)=1

* byteXor(0x12345678,0x87344321,2)=0

20

2

intbyteXor(intx,inty,intn){

//把x和y的第n个字节取出来异或,再转换为逻辑的0和1

y=y>

x=x&

(0xff);

y=y&

return!

!

(x^y);

*logicalAnd-x&

&

y

3

intlogicalAnd(intx,inty){

//把x和y分别转化为逻辑的0和1,再相与

x=(!

(!

x))&

y));

*logicalOr-x||y

intlogicalOr(intx,inty){

//把x和y分别转化为逻辑的0和1,再相或

x))|(!

*rotateLeft-Rotatextotheleftbyn

*Canassumethat0<

=n<

=31

rotateLeft(0x87654321,4)=0x76543218

25

introtateLeft(intx,intn){

//先构造低n位为1,高(32-n)位为0的数z,x左移n位后的数加上x右移(32-n)位的数&

z即可

intz;

z=~(((1<

31)>

31)<

n);

x=((x>

(32+(~n+1)))&

z)+(x<

/*

*parityCheck-returns1ifxcontainsanoddnumberof1'

s

parityCheck(5)=0,parityCheck(7)=1

4

intparityCheck(intx){

//每次将数的低半数位与高半数位比较,再把y右移31位,最后把y转化为逻辑的0和1

inty;

y=x<

16;

y=y^x;

y=y^(y<

8);

4);

2);

1);

31;

y);

*mul2OK-Determineifcancompute2*xwithoutoverflow

mul2OK(0x30000000)=1

*mul2OK(0x40000000)=0

*

intmul2OK(intx){

//把x第31位和30位分别和1做按位与,再异或,再和1异或

intm;

m=((x>

31)&

0x1)^((x>

30)&

0x1);

returnm^0x1;

*mult3div2-multipliesby3/2roundingtoward0,

*ShouldexactlyduplicateeffectofCexpression(x*3/2),

*includingoverflowbehavior.

mult3div2(11)=16

*mult3div2(-9)=-13

*mult3div2(1073741824)=-536870912(overflow)

12

intmult3div2(intx){

//左移一位再+x即x*3,右移一位的时候,当y的最高位和最低位都为0时还要+1

inty=(x<

1)+x;

y=(y>

1)+(((y>

1)&

(((y<

1));

returny;

*subOK-Determineifcancomputex-ywithoutoverflow

subOK(0x80000000,0x80000000)=1,

*subOK(0x80000000,0x70000000)=0,

3

intsubOK(intx,inty){

//x的最高有效位和y的最高有效位不同且x和(x-y)的最高位不同才能判断溢出

intm=(x>

intn=(y>

x=(m^n)&

(m^(((x+(~y+1))>

return(!

x);

*absVal-absolutevalueofx

absVal(-1)=1.

*Youmayassume-TMax<

=x<

=TMax

10

intabsVal(intx){

//x最高位为0时就是x,最高位为1时是~x+1

inty=x>

x=(y&

(~x+1))+((~y)&

*float_abs-Returnbit-levelequivalentofabsolutevalueofffor

*floatingpointargumentf.

*Boththeargumentandresultarepassedasunsignedint'

s,but

*theyaretobeinterpretedasthebit-levelrepresentationsof

*single-precisionfloatingpointvalues.

*WhenargumentisNaN,returnargument..

Anyinteger/unsignedoperationsincl.||,&

.alsoif,while

unsignedfloat_abs(unsigneduf){

intx=uf&

(~(1<

31));

if(x>

0x7f800000)

{

returnuf;

}

elsereturnx;

*float_f2i-Returnbit-levelequi

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 党团建设

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1