欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    实验03整数的表示实验.doc

    • 资源ID:3017773       资源大小:6.73MB        全文页数:16页
    • 资源格式: DOC        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    实验03整数的表示实验.doc

    -!浙江大学城市学院实验报告课程名称 计算机系统原理实验 实验项目名称 实验三 数据的机器级表示 实验成绩 指导老师(签名 ) 日期 一、实验目的:1、通过无符号数和带符号整数之间的相互转换来理解无符号数和补码整数的表示;2、了解IEEE 754浮点数在机器中的应用,特别是一些特殊值的处理。二、实验步骤:1、用32位补码表示的机器上编译并执行以下程序,记录程序的执行结果,并解释原因。图3-1 运行结果:对运算结果的解释:第一个结果:因为在ISO C90标准中,编译器将-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. 数据转化为无符号数,前者111B (232-1) > 后者1110B (232-2)3、分析以下代码:int sum(int a , unsigned len) int i, sum = 0;for (i = 0; i <= len-1; i+)sum += ai;return sum;当 len = 0 时, 执行 sum 函数的for循环时会发生 Access Violation , 即段错误异常. 但是, 当参数 len 说明为 int 型时, sum 函数能正确执行, 为什么?编写程序测试并分析。原因分析:因为当len的类型为unsigned时,len-1发生了下溢出,因此出现段错误。而int的表示范围包括了-1,因此正常运行。测试程序:Unsigned:Int:4、在 32 位计算机中运行一个 C 语言程序,在该程序中出现了以下变量的初值,请手工算出它们对应的机器数(用十六进制表示)(第二章习题9),写出详细的计算过程,然后用程序验证在内存中这些变量的机器数,并截图显示。(1)int x=-32768(2)short y=522(3)unsigned z=65530(4)char c=(5)float a=-1.1(6)double b=10.5手工计算过程:1. Int x=-32768 二进制原码(32位)10000000000000001000000000000000 补码: 除符号位外,每位取反,末位加一 11111111111111110111111111111111+1=11111111111111111000000000000000 转化为十六进制数:ffff80002. short y=522 二进制原码 (16位) 0000001000001010 补码:0000001000001010 十六进制:020a 3. unsigned z=65530 二进制原码 (32位) 00000000000000001111111111111010补码:00000000000000001111111111111010 十六进制:0000fffa4. char c= 的ASCII码为64 二进制原码(8位):01000000 补码:01000000十六进制数:405. float a=-1.1 二进制原码(32位)符号位:1(负) 阶数0->二进制00000000->偏移01111111->阶码:01111111 尾数:00011001100110011001101得到二进制机器数:10111111100011001100110011001100十六进制:bf8cccch (与程序验证有出入)6. Double b=10.5 二进制1010.1 规格化后:1.0101*211 符号位:0 阶数:11 阶码:000000000000011+011111111111111=100000000000010 尾0101000000 (52位) 结果即:0100000000000010 0101000000(52位) 十六进制即 4025000000000000 (与程序验证有出入)编程验证源码:查看内存结果截图:5、(选做)设计一个C语言程序,输出一个整数对应的有符号值和无符号值。源码:#include<stdio.h>#include<math.h>int sumn(char a200)int b200;int len=0;for (int i=0;ai!=0;i+)if (ai>=0&&ai<=9)bi=ai-0;else if (ai>=A&&ai<=F)bi=ai-A+10;len+;int sum=0; int k=0;for (int j=len-1;j>=0;j-)sum=sum+bj*pow(16,k);k+;return sum;int main(void)char num20;int a20; int remain10000; printf("请输入要显示的数据 格式为: 程序 参数 ,如 ./display 0x27n"); while (1) gets(num);int flag=0;int pos=0;if (num0=0&&num1=x)flag=1;if (num2=-)pos=1;for (int i=0;numi!=0;i+)numi=numi+3; elsefor (int i=0;numi!=0;i+)numi=numi+2; if (num0=-)pos=1;for (int i=0;numi!=0;i+)numi=numi+1; int sum=0;if (flag=0)for (int i=0;numi!=0;i+)ai=numi-0;sum=sum*10+ai;int o=0;int len=0;if (flag=1)for (int i=0;numi!=0;i+)len+; sum=sumn(num); int k=0;char q11;q0=0;q1=x;for (int i=2;i<10;i+)qi=0;char hex16=0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F;if (pos=1)sum=128+sum; int t=sum;int j=9;while (t>0)qj=hext%16;t=t/16;j-;if (pos=0)printf("Hex:");for (int i=0;i<10;i+)printf("%c",qi); printf(" Signed: %d Unsigned: %dn",sum,sum); elseprintf("Hex:");for (int i=0;i<9;i+)printf("%c",qi); printf(" Signed: %d Unsigned: %dn",-sum,sum+128); 运行结果:6、编写程序得出float和double类型的精度(计算机专业必做,软件工程专业选做);源代码:运算结果:根据初始值和输出值的比较得出,float的精度约为7位,double的精度约为16位7、(选做)设计一个C语言程序,输出一个浮点数的IEEE754标准的二进制表示。源代码:#include<stdio.h>int main(void)while (1)float n;printf("请输入要输出的数字(输出结果以二进制表示)n");scanf("%f",&n);int flag=0;if (n<0)flag=1;n=-n;printf("Floating point value: %.9f n",n);int a=(int)n;int two100;float b;b=n-a;int i=0;int len=0;while (a)twoi=a%2;a=a/2;i+;len+;int point=len;int o100;for (int i=0;i<len;i+)oi=twolen-i-1; for (i=len;i<24;i+) oi=(int)(b*2); b=2*b-(int)(b*2); int ex8=0; point=point-1+127; int k=7; while (point) exk=point%2; point=point/2; k-; printf("Bit Representation="); printf("%d",flag); for (int j=0;j<8;j+) printf("%d",exj); for (int j=1;j<24;j+) printf("%d",oj); printf(" sign=%d exponent=",flag); for (int j=0;j<8;j+) printf("%d",exj); printf(" fraction="); for (int j=1;j<24;j+) printf("%d",oj); printf("n"); printf("n"); 运算结果:解释:先判断正负来确定符号位,然后将浮点数分为整数部分和小数部分,分别按相应规则转化为二进制数,根据IEEE754规则,浮点数在计算机中储存形式位 1位符号位,加8位阶码,以及23位尾数组成,根据此规则输出即可。四、思考题(必做)1、你的机器字长多少位?int类型的位数、最小值和最大值各是多少?32位 32位 -214783648 214783647 2、 在你的机器上,-1用int类型和unsiged int类型表示的结果分别是多少?3、 float类型和double类型的精度各是多少?Float 7-8位 double 15位4、 gcc默认的C语言标准是哪一个?GNU C90

    注意事项

    本文(实验03整数的表示实验.doc)为本站会员(小**)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开