发布网友 发布时间:2024-10-24 09:54
共1个回答
热心网友 时间:2024-11-13 13:36
不同的数据存储格式不一样,追问我想知道的输出为0的原理
追答
这个结果是不确定的,跟编译器和硬件有关。原则上 整数存储方式基本上 c语言通用 大序或者小序存储,只跟操作系统和处理器有关。 而浮点数没有严格规定,通常用 IEEE 754 , 我们就用IEEE 754 格式来看看。
整数a = 1 二进制存储是 0000 0000 0000 0000 0000 0000 0000 0001
如果我们强行把他当成浮点数,那么数值变为
2^(-126) * 2^(-22) = 2.8 * 10^(-45)
然后这个还是不对,原因在于,printf只接受double类型,所以应该是对 int 看成 double来输出,因为 int 字节数 和 double 字节数不匹配,具体如何实现不太确定,不过一点可以肯定的是,这个数值非常的小。
为简单起见,我们来看如果字节数和 double 字节数相同的整型数据: 整数1,会输出4.9* 10^(-324), 如果你用 "%f"的格式输出,当然结果就是 0 了。
long long a = 1;
printf("%g", a);
这种应该是
2^(-1022) * 2^(-52) = 4.9* 10^(-324)