c语言输出函数的疑惑!!

来源:百度知道 编辑:UC知道 时间:2024/06/06 19:47:21
main()
{float a;
a=6.02e23;
printf("%d",a);................1
printf("%ld",a);...............2
printf("%d%ld",a,a);}..........3
为什么2输出的a是536870912,而3输出的a是-559996928

一个float型实数在内存中占4个字节,即32个二进制bit,从低位到高位依次叫第0位到第31位.这32位可以分为3个部分:符号位(第31位),阶码(第30位到第23位共8位),尾数(最低23位)。
1、符号位。最高位也就是第31位表示这个实数是正数还是负数,为0表示正数或0,为1表示负数.
2、阶码。第30位到第23位这8个二进制位表示该实数转化为规格化的二进制实数后的指数与127(127即所谓偏移量)之和即所谓阶码.
规格化的二进制实数的指数只能在-127----+127之间,所以,一个float型数的最大值在+2^127即+3.4*10^38,最小值在-2^127即-3.4*10^38.
3、尾数。其他最低的23位即第22位到第0位表示该实数转化为规格化的二进制实数后小数点以后的其余各位即所谓尾数.

你按照%d输出,它只会再内存中取2位,输出的当然不正确。

输出格式的问题
a本来是个float变量
你却要按照长整型变量进行输出当然不对了
第三个也是

输出格式的问题