《计算机基础大作业完整版》由会员分享,可在线阅读,更多相关《计算机基础大作业完整版(28页珍藏版)》请在金锄头文库上搜索。
1、学 生 实 验 报 告(理工类)课程名称:计算机系统基础I 专业班级: 学生学号: 学生姓名: 所属院部: 计算机工程学院 指导教师: 20192020学年 第 1 学期 金陵科技学院教务处制实验报告书写要求实验报告原则上要求学生手写,要求书写工整。若因课程特点需打印的,要遵照以下字体、字号、间距等的具体要求。纸张一律采用A4的纸张。实验报告书写说明实验报告中一至四项内容为必填项,包括实验目的和要求;实验仪器和设备;实验内容与过程;实验结果与分析。各院部可根据学科特点和实验具体要求增加项目。填写注意事项(1)细致观察,及时、准确、如实记录。(2)准确说明,层次清晰。(3)尽量采用专用术语来说明
2、事物。(4)外文、符号、公式要准确,应使用统一规定的名词和符号。(5)应独立完成实验报告的书写,严禁抄袭、复印,一经发现,以零分论处。实验报告批改说明实验报告的批改要及时、认真、仔细,一律用红色笔批改。实验报告的批改成绩采用百分制,具体评分标准由各院部自行制定。实验报告装订要求实验批改完毕后,任课老师将每门课程的每个实验项目的实验报告以自然班为单位、按学号升序排列,装订成册,并附上一份该门课程的实验大纲。实验项目名称: 数据的表示 实验学时: 2 同组学生姓名: 无 实验地点: 实验日期: 实验成绩: 批改教师: 批改时间: 一、实验目的和要求熟悉数值数据在计算机内部的表示方式,掌握相关的处理
3、语句。二、实验仪器和设备硬件环境:IA-32软件环境:Linux ubuntu14.04,C语言,gcc三、实验内容与过程1、实验内容1. “-2 2”和“-2 2u”的结果一样吗?为什么?请编写程序验证。2. 运行下图中的程序代码,并对程序输出结果进行分析。3. 运行下列代码,并对输出结果进行分析。#include void main()union NUMint a;char b4; num;num.a = 0x12345678;printf(0x%Xn, num.b2);4. 请说明下列赋值语句执行后,各个变量对应的机器数和真值各是多少?编写一段程序代码并进行编译,观察默认情况下,编译器是
4、否报warning。如果有warning信息的话,分析为何会出现这种warning信息。int a = 2147483648;int b = -2147483648;int c = 2147483649;unsigned short d = 65539;short e = -32790;5. 编译运行以下程序,并至少重复运行3次。void main() double x=23.001, y=24.001, z=1.0;for (int i=0; i10; i+) if (y-x)=z) printf(equal.n);else printf(not equaln); x += z; y +=
5、z; printf(%d, %f , %fn”, i, x, y); 要求:(1)给出每次运行的结果截图。(2)每次运行过程中,是否每一次循环中的判等结果都一致?为什么?(3)每次运行过程中,每一次循环输出的i、x和y的结果分别是什么?为什么?2、实验步骤1. 进入linux系统,在shell终端的提示符后输入gedit,编写C语言源程序。gedit输入实验内容1的源程序并以SAMPLE.C为文件名将文件存盘。2. 用GCC 对源文件SAMPLE.C进行编译并产生目标文件SAMPLE.O,汇编语言程序SAMPLE.S。gcc s o SAMPLE.S SAMPLE.C gcc g o SAMP
6、LE.O SAMPLE.C3. 用GDB跟踪执行SAMPLE。gdb SAMPLE4. 观察程序执行情况并记录运行结果。5. 依照上述四个步骤,完成对其余实验内容的操作。四、实验结果与分析(1)#includevoid main()int a,c;a=(-22)?1:0;c=(-22u)?1:0;printf(%dn%dn,a,c);正数的原码,反码,补码都一样。而负数在计算机里是按补码存放和运算的。-2在内存中的存储方式为1111,1111,1111,1111,11111,11111,1111,1110B即fffffffeH,最高位为符号位,2在内存中的存储方式为0000,0000,0000
7、,0000,0000,0000,0000,0010B即2H,最高位为符号位,2u在内存中存储的方式为0000,0000,0000,0000,0000,0000,0000,0010B即2H,最高位不再是符号位。所以-22是符号位的比较,即-22是正确的。-22u是有符号数和无符号数之间的比较,此时编译器会把有符号数自动转无符号数,所以-2=2。-22,是有符号数的比较,即2+(-2)=f f f f f f f eH+f f f f f f f e H=1FFFFFFFCH=-4补,最高位符号位溢出,所以证明被减数的符号是负号,即-22是正确的。.有符号数和无符号数的比较。系统会自动把有符号数转
8、换成无符号数。fffffffeH=4294967294Dc,所以输出unsigned short is 1#includeVoid main()Unsigned int a=1;Unsigned short b=1;Char c= -1;Int d;d=(ac)?1:0;printf(“unsigned int is %dn”,d);d=(bc)?1:0;printf(“unsigned int is %dn”,d);(3)由于在union共用体当中,int a 和char b4数据公用同一段内存地址,而此时a和b同时占用四个字节,所以当执行num.a = 0x12345678;同时b也会被赋
9、值,b的内存示意图如下:b的值87654321b的地址b0b1b2b3由上图可知执行printf(0x%Xn, num.b2);会输出0x34。现在解释为什么会出现表中的情况对于数组来说,下标越小地址越小,下标越大地址越大,而a=0x12345678这个值中,1和2分别在最高位和次高位,它就会存储在下标大的b3中,以此类推,便可以得到表中的数据。这也证明了我的32位Ubuntu是小端存储(字数据的高字节存储在高地址中,而字数据的低字节则存储在低地址中)。(4)#includevoid main() int a=2147483648;4个字节 int b=-2147483648; int c=-
10、2147483649; unsigned short d=65539;2个字节 short e=-32790;2个字节 printf(%dn,a); printf(%dn,b); printf(%dn,c); printf(%dn,d); printf(%dn,e);机器数就是数字在计算机中的二进制表示形式,其特点 一是符号数字化,二是 其数的大小受机器字长的限制。将带符号位的机器数对应的真正数值称为机器数的真值 int a = 2147483648 的机器数是 1000 0000 0000 0000 0000 0000 0000 0000B int b = -2147483648 的机器数是
11、 1000 0000 0000 0000 0000 0000 0000 0000B int c = 2147483649 的机器数是 1000 0000 0000 0000 0000 0000 0000 0001B unsigned short d = 65539 的机器数无法表示 short e = -32790 的机器数无法表示 int 类型在 32 位计算机中占 4 个字节,即 32 位。又因为正数的补码是其本身,所以 int 类型能表示的所有正数为: 0,000 0000 0000 0000 0000 0000 0000 0000B 到 0,111 1111 1111 1111 111
12、1 1111 1111 1111B即 0 到+2147483647 。而负数的补码是除符号位外各位取反最后加一而来。所以 int 类型所能表示的所有负数为: 0,000 0000 0000 0000 0000 0000 0000 0000B(-0D的补码) 到 1,111 1111 1111 1111 1111 1111 1111 1111B即 0 到-2147483647D 。而 32 位二进制数能表示的所有值为 2 的 32 次方个, 而从 -2147483647D 到+2147483647D 总共是 2 的 32 次 方减一个数,而少的这个数就是 1000 0000 0000 0000 0000 0000 0000 0000B (-0D 的补码),而任何数的原码都不能在转换成补码时成为这个数,我们人为的把他规定为 -2147483648 所以 int 类型的取值范围为 -2147483648 到+2147483647,所以题目中的 b 是正确的, 并且不会发 生 溢 出 。 而