实验报告二 数据的表示.docVIP

  • 81
  • 0
  • 约2.28千字
  • 约 4页
  • 2020-08-07 发布于河北
  • 举报
计算机系统基础实验报告 学院 信电学院 专业 计算机科学与技术 ??班级 计算机1401 ?学号 140210110 姓名 段登赢 实验时间: 实验名称:数据的表示1 实验目的和要求: (1)实验目的:熟悉数值数据在计算机内部的表示方式,掌握相关的处理语句。 (2)实验要求:说明你做实验的过程(重要步骤用屏幕截图表示);提交源程序;分析并回答问题。 实验环境(软、硬件): 软件环境: 操作系统:Ubuntu ,版本:15.04 编译器软件:GCC, 版本:5.4.0 硬件环境: 处理器:i386处理器 处理器个数:双处理器 总核心数:四核 处理器位数:32位 实验内容: (1)下述两个结构所占存储空间多大?结构中各分量所在位置相对于结构起始位置的偏移量是多少?请编写程序以验证你的答案。 struct test1 { char x2[3]; short x3[2]; int x1; long long x4; }; struct test2 { char x2[3]; short x3[2]; int x1; long long x4; }__attribute__((aligned(8))); (2)“-2 2”和“-2 2u”的结果一样吗?为什么? (3)运行下图中的程序代码,并对程序输出结果进行分析。 (4)运行下列代码,并对输出结果进行分析。 #include stdio.h void main() { union NUM { int a; char b[4]; } num; num.a = 0 printf(0x%X\n, num.b[2]); } 实验结果及分析: (1) (2) 实验分析: 正数的源码,反码,补码都相同,负数在计算机存储时按补码存储和运算,源码除符号位外将每一位按位取反最后加一而来。在32位计算机中int占4个字节共32位。所以-2在内存中的存储方式:1,111 1111 1111 1111 1111 1111 1111 1110B即fffffffeH,此时最高位为符号位,2在内存中的存储方式:0,000 0000 0000 0000 0000 0000 0000 0010B即2H,此时最高位为符号位。2u在内存中的存储方式:0000 0000 0000 0000 0000 0000 0000 0010B即2H,但此时最高位不再是符号位。由上述可知:-22是有符号数的比较,即-2+(-2)=fffffffeH+fffffffeH=1FFFFFFFCH= ,最高位符号位溢出,所以证明被减数的符号是负号,即-22是正确的。-22u是有符号数和无符号数之间的比较,此时编译器会把有符号数自动转换成无符号数,所以就是:fffffffeH=4294967294D2D=2H,显然这是错误的。 (3) 实验分析: 因为所有比int型小的数据类型(包括char,signed char,unsigned char,short,signed short,unsigned short)转换为int型。如果转换后的数据会超出int型所能表示的范围的话,则转换为unsigned int型;所以题中的c在和a比较时应该先转换成int型,再转换成unsigned int型,所以此时的c为1111 1111 1111 1111 1111 1111 1111 1111B(有符号数按最高位符号位进行扩位)即FFFFFFFFH,此时的a为1H,显然c大于a,所以第一次输出的是unsigned int is 0;同理当b和c比较时,c应该转换成int型,所以此时的c为1111 1111 1111 1111 1111 1111 1111 1111B即FFFFH=-2147483647D,b也应该转换成int型,所以此时的b为0000 0000 0000 0000 0000 0000 0000 0001B=1D,显然bc,所以输出unsigned short is 1 (4) 实验分析: 由于在union共用体当中,int a 和char b[4]数据公用同一段内存地址,而此时a和b同时占用四个字节,所以当执行num.a = 0同时b也会被赋值,b的内存示意图如下: b的值 8 7 6 5 4 3 2 1 b的地址 b[0] b[1] b[2] b[3] 由上图可知执行printf(0x%X\n, num.b[2]);会输出0x34。现在解释为什么会出现表中的情况对于数组来说,下标越小地址越小,下标越大地址越大,而a=0个值中,1和2分别在最高位和次

文档评论(0)

1亿VIP精品文档

相关文档