实验分析报告三数据的表示

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验报告三数据的表示

————————————————————————————————作者:————————————————————————————————日期:

计算机系统基础实验报告

学院信电学院专业计算机科学与技术班级计算机1401 学号140210110 姓名段登赢实验时间:

一、实验名称:数据的表示2

二、实验目的和要求:

(1)实验目的:熟悉数值数据在计算机内部的表示方式,掌握相关的处理语句。

(2)实验要求:说明你做实验的过程(重要步骤用屏幕截图表示);提交源程序;分析并回答问题。

三、实验环境(软、硬件):

要求:详细描述实验用的操作系统,源代码编辑软件,相关硬件环境及所使用的GCC 编译器的信息。

四、实验内容:

(1)请说明下列赋值语句执行后,各个变量对应的机器数和真值各是多少?编写一段程序代码并进行编译,观察默认情况下,编译器是否报warning。如果有warning信息的话,分析为何会出现这种warning信息。

int a = 2147483648;

int b = -2147483648;

int c = 2147483649;

unsigned short d = 65539;

short e = -32790;

(2)完成书上第二章习题中第40题,提交代码,并在程序中以十六进制形式打印变量u 的机器数。

(3)编译运行以下程序,并至少重复运行3次。

void main()

{

double x=23.001, y=24.001, z=1.0;

for (int i=0; i<10; i++) {

if ((y-x)==z)

printf("equal\n");

else

printf("not equal\n");

x += z;

y += z;

printf("%d, %f , %f\n”, i, x, y);

}

}

要求:

(1)给出每次运行的结果截图。

(2)每次运行过程中,是否每一次循环中的判等结果都一致?为什么?

(3)每次运行过程中,每一次循环输出的i、x和y的结果分别是什么?为什么?

五、实验结果及分析:

(1)

实验分析:

机器数就是数字在计算机中的二进制表示形式,其特点一是符号数字化,二是其数的大小受机器字长的限制。将带符号位的机器数对应的真正数值称为机器数的真值int a = 2147483648的机器数是1000 0000 0000 0000 0000 0000 0000 0000B

int b = -2147483648的机器数是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 1111 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是正确的,并且不会发生溢出。而题目中的a=2147483648其实已经超出int类型的最大范围,但是a=2147483648=2147483647+1=0,111 1111 1111 1111 1111 1111 1111 1111B+1B=1000 0000

0000 0000 0000 0000 0000 0000B= -2147483648,而-2147483648又在int类型的取值范围内,所以也不会溢出,如果此时打印输出a的十进制就是-2147483648,同理可得 c = 2147483649=2147483647+2= -2147483647,也不会发生溢出现象。a,b,c的打印输出结果。如下图所示:

对于题目中的d,由于它是无符号短整型的变量,在32位机中占两个字节。所以d的取值范围为:0到65535,而65539不在这个范围内,所以会报溢出警告。

对于题目中的e,由于它是有符号短整型的变量,在32位机中占两个字节。所以e的取值范围为:-32768到+32767,此时c=-32790=-32768-22=-32768+(-22)=

1000 0000 0000 0000 0000 0000 0000 0000B + 1111 1111 1111 1111 1111 1111 1110 1001B =0001 0111 1111 1111 1111 1111 1111 1110 1001B=+6442450921D>>+32767D所以e会报出溢出警告。

(2)

实验分析:

1)计算机中单精度浮点数的表示方法:

1位符号位记作S 8位阶码记作E 23位尾数记作F 其中符号位:0表示正数,1表示负数。8位阶码:8为二进制数可以表示0到255之间的255个值,但是指数不仅有正数,它还有负数,为了处理负指数的情况,让实际的指数值加上一个偏差(Bias,记作B)值作为保存在指数域的值,单精度的偏差值为127,例如如果指数是0,那么8位阶码就是127+0=127=0111 1111B。位数实际是由24位表示,但是小数点左边的1或0默认是隐藏的,所以位数就成23位了,对于这个隐藏的数字我们记作Y。

2)几种浮点数的表示:

描述 E F

规格化浮点数S E≠0&E≠255 F

非规格化浮点数S 0000 0000 F

无穷大浮点数S 1111 1111 0000 0000 0000 0000 0000 000

NaN非数S 1111 1111 F≠0

3)单精度浮点数所能表示的所有正数的主要临界点

描述(Y)S E F B+指数=E

零(0)0 0000 0000 0000 0000 0000 0000 0000 000 -126

最小的非规格化数(0)0 0000 0000 0000 0000 0000 0000 0000 001 -126 148

-

2(0)0 0000 0000 0000 0000 0000 0000 0000 010 -126

…(0)0 ……-126

相关文档
最新文档