您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 数据结构与算法 > 实验报告二-数据的表示1
计算机系统基础实验报告学院信电学院专业计算机科学与技术班级计算机1401学号140210110姓名段登赢实验时间:一、实验名称:数据的表示1二、实验目的和要求:(1)实验目的:熟悉数值数据在计算机内部的表示方式,掌握相关的处理语句。(2)实验要求:说明你做实验的过程(重要步骤用屏幕截图表示);提交源程序;分析并回答问题。三、实验环境(软、硬件):软件环境:操作系统:Ubuntu,版本:15.04编译器软件:GCC,版本:5.4.0硬件环境:处理器:i386处理器处理器个数:双处理器总核心数:四核处理器位数:32位四、实验内容:(1)下述两个结构所占存储空间多大?结构中各分量所在位置相对于结构起始位置的偏移量是多少?请编写程序以验证你的答案。structtest1{charx2[3];shortx3[2];intx1;longlongx4;};structtest2{charx2[3];shortx3[2];intx1;longlongx4;}__attribute__((aligned(8)));(2)“-22”和“-22u”的结果一样吗?为什么?(3)运行下图中的程序代码,并对程序输出结果进行分析。(4)运行下列代码,并对输出结果进行分析。#includestdio.hvoidmain(){unionNUM{inta;charb[4];}num;num.a=0x12345678;printf(0x%X\n,num.b[2]);}五、实验结果及分析:(1)补]4[(2)实验分析:正数的源码,反码,补码都相同,负数在计算机存储时按补码存储和运算,源码除符号位外将每一位按位取反最后加一而来。在32位计算机中int占4个字节共32位。所以-2在内存中的存储方式:1,1111111111111111111111111111110B即fffffffeH,此时最高位为符号位,2在内存中的存储方式:0,0000000000000000000000000000010B即2H,此时最高位为符号位。2u在内存中的存储方式:00000000000000000000000000000010B即2H,但此时最高位不再是符号位。由上述可知:-22是有符号数的比较,即-2+(-2)=fffffffeH+fffffffeH=1FFFFFFFCH=,最高位符号位溢出,所以证明被减数的符号是负号,即-22是正确的。-22u是有符号数和无符号数之间的比较,此时编译器会把有符号数自动转换成无符号数,所以就是:fffffffeH=4294967294D2D=2H,显然这是错误的。(3)实验分析:因为所有比int型小的数据类型(包括char,signedchar,unsignedchar,short,signedshort,unsignedshort)转换为int型。如果转换后的数据会超出int型所能表示的范围的话,则转换为unsignedint型;所以题中的c在和a比较时应该先转换成int型,再转换成unsignedint型,所以此时的c为11111111111111111111111111111111B(有符号数按最高位符号位进行扩位)即FFFFFFFFH,此时的a为1H,显然c大于a,所以第一次输出的是unsignedintis0;同理当b和c比较时,c应该转换成int型,所以此时的c为11111111111111111111111111111111B即FFFFH=-2147483647D,b也应该转换成int型,所以此时的b为00000000000000000000000000000001B=1D,显然bc,所以输出unsignedshortis1(4)实验分析:由于在union共用体当中,inta和charb[4]数据公用同一段内存地址,而此时a和b同时占用四个字节,所以当执行num.a=0x12345678;同时b也会被赋值,b的内存示意图如下:b的值87654321b的地址b[0]b[1]b[2]b[3]由上图可知执行printf(0x%X\n,num.b[2]);会输出0x34。现在解释为什么会出现表中的情况对于数组来说,下标越小地址越小,下标越大地址越大,而a=0x12345678这个值中,1和2分别在最高位和次高位,它就会存储在下标大的b[3]中,以此类推,便可以得到表中的数据。这也证明了我的32位Ubuntu是小端存储(字数据的高字节存储在高地址中,而字数据的低字节则存储在低地址中)。六、实验心得通过这次实验让我对结构体和公共体有了更为深入的理解,首先我明白了结构体中成员的对齐理论,知道了在结构体中数据成员初始化顺序的不同也会影响到该结构体所占的内存空间的大小。其次我也学到了公共体的成员的内存地址是相同的,并且自己通过实验也亲自验证了这一结论。并且再一次巩固了C语言中数据类型之间的自动转换,无符号数与有符号数之间的转换规则。
三七文档所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
本文标题:实验报告二-数据的表示1
链接地址:https://www.777doc.com/doc-5079388 .html