vc6每次都等于0.000000
printf("%f\n", (float)10/3);
printf("%f\n", 10.0/3);
结果:3.333333
我去睡觉了,一会再说
编译器看到带有小数点的十进制数,那么会将其默认为double类型(而不是float),double类型在一般的机子里都占有8个字节(64位)。格式化输出会根据%f的格式化输出进行提升。也就是double型,其输出有和编译器有点关系吧。
IEEE浮点数标准:
4字节浮点数:1位符号位,8位阶数(基数为127的移码),23位尾数;
8字节浮点数:1位符号位,11位阶数(基数为1023的移码),52位尾数
在VC中:
float数值范围约在 -10e38~10e38,并提供7位有效数字位,/*绝对值小于10e38地数被处理成零值*/
double数值范围约在-10e308~10e308,并提供15~16位有效数字,/*绝对值小于10e308地数被处理成零值*/
注:拷贝没注意。。。。丑大了
鄙人技术不行,以后不说话了。。。
10/3=3
这是整型3,在内存中是(int以四个字节)0000 0000 0000 0000 0000 0000 0000 0011入栈,输出double型数据为0
000 00000000
00000000000000000011********************************
float
共计64位,8字节
由最高到最低位分别是第63、62、61、……、0位
63位是符号位,1为负,0为正。
62-51位,一共11位是指数位。
50-0 位,一共52位是尾数位。
IEEE 754在标识符点数时, 每个浮点数均由3个部分组成:符号位S(1位),指数部分E和尾数部分M
单精度格式(32位):E=8位,M=23位。
双精度格式(64)位:E=11位,M=52位
00000000000000000011********************************为0.00000000000000000011********************************
因为当e二进制全部为0,为非规格化数,被表示为零。。。
同时C++/C类型转换默认的舍入方式是向0截断。
PS:欢迎批评指教,能力有限啊
[[it] 本帖最后由 lishizelibin 于 2009-7-31 17:09 编辑 [/it]]