下面举例说明:
float型数据125.5转换为标准浮点格式
125二进制表示形式为1111101,小数部分表示为二进制为1,则125.5二进制表示为1111101.1,由于规定尾数的整数部分恒为1,则表示为1.1111.11*2^6,阶码为6,加上127为133,则表示为10000101,而对于尾数将整数部分1去掉,为1111011,在其后边补0使其位数达到23位,则为1111011 00000000 00000000
则其二进制表示形式为
01000010 11111011 00000000 00000000
则在内存中存放方式为:
00000000
低地址
00000000
11111011
01000010
高地址
那么对于本程序值为什么是0呢,因为函数进行了类型转换把float转换为double了。
同理:125二进制表示形式为1111101,小数部分表示为二进制为1,则125.5二进制表示为1111101.1,由于规定尾数的整数部分恒为1,则表示为1.1111.11*2^6,阶码为6,加上1023为1029,则表示为10000000101,而对于尾数将整数部分1去掉,为1111011,在其后边补0使其位数达到52位,则为1111 01100000 00000000 00000000 00000000 00000000 00000000
则其二进制表示形式为
01000000 01011111 01100000 00000000 00000000 00000000 00000000 00000000
则在内存中存放方式为:
00000000
低地址
00000000
00000000
00000000
00000000
01100000
01011111
01000000
高地址
因此输出时会输出低地址的4个字节0;
如果printf("%d%d",i);那么第二个%d输出1079984128,该数的二进制是100000010111110110000000000000正好是高地址的4个字节