电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

实验03整数的表示实验VIP免费

实验03整数的表示实验_第1页
实验03整数的表示实验_第2页
实验03整数的表示实验_第3页
-!浙江大学城市学院实验报告课程名称计算机系统原理实验实验项目名称实验三数据的机器级表示实验成绩指导老师(签名)日期一、实验目的:1、通过无符号数和带符号整数之间的相互转换来理解无符号数和补码整数的表示;2、了解IEEE754浮点数在机器中的应用,特别是一些特殊值的处理。二、实验步骤:1、用32位补码表示的机器上编译并执行以下程序,记录程序的执行结果,并解释原因。图3-1运行结果:-!对运算结果的解释:第一个结果:因为在ISOC90标准中,编译器将-2147483648分为两个部分来处理。首先将2147483648看成无符号整型,其机器数为0x80000000,然会对其取负,结果仍为0x80000000,还是将其看成无符号整型,其值仍为21474833648,因此前者大于后者。第二个结果:由于i为int型变量,因此这两个数皆为带符号数,前者小于后者。第三个结果:编译器首先将2147483647看成带符号整型,然后对其取负,得到-2147483647,然后对其-1得到-2147483648,因此前者大于后者。2、编写程序,计算表2.1中的表达式,说明运算类型(无符号、带符号),得到运算结果,并说明为什么是这样的运算结果(参考第二章习题8);源代码:-!运算结果:对运算结果的解释:1.0和0U都是无符号数,值相等2.-1和0都为带符号数,因此前者小于后者-!3.0后加上U表示无符号数,因此比较时前者大于后者4.-2147483647-1的计算结果为一个int型整数,为带符号数,因此前者大于后者。5.加上U的数都为无符号数,因此前者小于后者6.2147483648U在经过int强制类型转换后,变为带符号的-2147483648,因此前者大于后者7.两个数皆为带符号数,因此前者大于后者8.数据转化为无符号数,前者11⋯1B(2^32-1)>后者11⋯10B(2^32-2)3、分析以下代码:intsum(inta[],unsignedlen){inti,sum=0;for(i=0;i<=len-1;i++)sum+=a[i];returnsum;}当len=0时,执行sum函数的for循环时会发生AccessViolation,即段错误异常.但是,当参数len说明为int型时,sum函数能正确执行,为什么?编写程序测试并分析。原因分析:因为当len的类型为unsigned时,len-1发生了下溢出,因此出现段错误。而int的表示范围包括了-1,因此正常运行。测试程序:Unsigned:-!Int:-!4、在32位计算机中运行一个C语言程序,在该程序中出现了以下变量的初值,请手工算出它们对应的机器数(用十六进制表示)(第二章习题9),写出详细的计算过程,然后用程序验证在内存中这些变量的机器数,并截图显示。(1)intx=-32768(2)shorty=522(3)unsignedz=65530(4)charc=’@’(5)floata=-1.1(6)doubleb=10.5-!手工计算过程:1.Intx=-32768二进制原码(32位)10000000000000001000000000000000补码:除符号位外,每位取反,末位加一11111111111111110111111111111111+1=11111111111111111000000000000000转化为十六进制数:ffff80002.shorty=522二进制原码(16位)0000001000001010补码:0000001000001010十六进制:020a3.unsignedz=65530二进制原码(32位)00000000000000001111111111111010补码:00000000000000001111111111111010十六进制:0000fffa4.charc=‘@’@的ASCII码为64二进制原码(8位):01000000补码:01000000十六进制数:405.floata=-1.1二进制原码(32位)符号位:1(负)阶数0->二进制00000000->偏移01111111->阶码:01111111尾数:00011001100110011001101得到二进制机器数:10111111100011001100110011001100十六进制:bf8cccch(与程序验证有出入)6.Doubleb=10.5二进制1010.1规格化后:1.0101*2^11符号位:0阶数:11阶码:000000000000011+011111111111111=100000000000010尾0101000⋯⋯000(52位)结果即:01000000000000100101000⋯⋯000(52位)十六进制即4025000000000000(与程序验证有出入)编程验证源码:-!查看内存结果截图:5、(选做)设计一个C语言程序,输出一个整数对应的有符号值和无符号值。源码:#include#includeintsumn(chara[200]){-!intb[200];intlen=0;for(inti=0;a[i]!='\0';i++){if(a[i]>='0'&&a[i]<='9'){b[i]=a[i]-'0';}elseif(a[i]>='A'&&a[i]<='F'){b[i]=a[i]-'A'+10;}len++;}intsum=0;intk=0;for(intj=len-1;j>=0...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

爱的疯狂+ 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部