linux的GCC下类型转换,大家帮忙解释一下。程序结果在下面
来源:百度知道 编辑:UC知道 时间:2024/08/20 15:27:23
1.#include<stdio.h>
int main()
{
printf(“%f”,5);
printf(“%d”,5.01);
}
会输出:-1.995201
1889785610
这是为什么?
不是。我只想知道为什么会出来这个数字。我不是说自己不会强制转换。还有程序多次运行-1.995201这个数字还会不断变换。
int main()
{
printf(“%f”,5);
printf(“%d”,5.01);
}
会输出:-1.995201
1889785610
这是为什么?
不是。我只想知道为什么会出来这个数字。我不是说自己不会强制转换。还有程序多次运行-1.995201这个数字还会不断变换。
这个比较奇怪,printf这个函数确实有不少隐患。
估计应该是printf其实并没有对参数进行严格的类型转换,而是直接使用了参数的内容:
比如第一个%f,需要一个浮点数,会使用8个字节的内存内容,而传入的只有4个字节的,因此就会有4个字节的值是每次都不一样的
第二个%d,5.01是一个double型的值,8个字节,%d取了4个字节,因此每次都是固定值。
===
具体的再研究下先
第一个把整数5用浮点形式输出,需要加类型转换float或者double等
第二个你是把浮点数5.01用整数形式输出,需要加int或者long等