int类型定义,float、double类型引用造成的结果

来源:互联网 发布:网络教育如何考试 编辑:程序博客网 时间:2024/05/22 02:09

测试程序:


//main.cint x = 0x1234;int y = 0x2345;int t = 0x3456;int k = 0x4567;void int2double();int main(){int2double();printf("x:0x%x, y:0x%x, t:0x%x,k:0x%k\n", x, y , t, k);return 0;}


//int2double.cdouble x;float t;void int2double(){x = -0.0;x = -8.25;   //8.25 = 1000.01bx = -0.25;//0.25 = 0.01b;t = 0.0;t = 8.25;t = 0.25;}


在main.c中定义的int类型x,y, t,k在int3double.c中用double,float类型引用会使xytk的值变成什么?
8.25用二进制数表示为:1000.01,用科学计数法表示为: 1.00001 * 2^3。

所以根据IEEE标准,float类型-8.25在内存中的存储为:

符号位-----指数(8位)-----尾数

  1-----------127+3--------00001==0xc104 0000

根据IEEE标准,浮点数的指数部分要加上基127,尾数部分只取科学计数法的小数部分即可。

所以根据IEEE标准,double类型-8.25在内存中的存储为:

符号位------指数(11位)------尾数

  1-----------1023+3----------00001== 0xc020 8000 0000 0000

根据IEEE标准,浮点数的指数部分要加上基1023,尾数部分只取科学计数法的小数部分即可。


0.25用二进制数表示为:0.01,用科学计数法表示为: 1.0 * 2^(-2)。

所以根据IEEE标准,float类型-0.25在内存中的存储为:

符号位--------指数(8位)-----------尾数

  1-------------127-2----------------0     ==  0xbe80 0000;

double类型-0.25在内存中的存储为:

符号位--------指数(11位)----------尾数

  1-------------1023-2---------------0==  0xbfd0 0000 0000 0000;


那么问题就来了,float类型的0.0在内存中怎么存储?

难道是下面这样吗?

符号位------指数-------- 尾数

    0----------127+0---------0  == 0x7f80 0000

其实不是的,0.0在内存中的存储就是0;

计算机不会按照float类型去存储0.0,而是按照整数类型的0存储的。



0 0