2 crazymonk CrazyMonk 于 2015.05.25 20:59 提问

C语言数据转换问题。。。。。

int a = 5;
printf("%f",a);//这个输出的为什么是0.000000啊?
但是我如果这样写
int a = 5;
float b = a;
printf("%f",b);//那输出的就是5.00000了

11个回答

yunfenglw
yunfenglw   2015.05.25 21:43
已采纳

数据在存储器上本质上都是二进制形式,之所以存在整型、浮点型是因为我们定义的数据格式和对数据的操作不同~
int a = 5;//是将a按整型数据二进制格式存储
printf("%f",a);//是将数据a按浮点数据二进制格式解析~
当然会产生不同~

liuyuxuan2388
liuyuxuan2388   2015.05.25 21:05

printf 的参数并不会自动做类型转换的。
例子中格式串中有“%f”,编译器就会当后边的参数是个浮点数,它不做类型检查。
而把一个 int当成浮点数,因为两种类型的存储结构是完全不同的,后果就难以预料了,有可能程序崩溃,也可能正常运行,但得不到正确的结果。
具体到楼主这个问题, 把整数1当成浮点数处理,那就是符号位0,阶码0,尾数1,是非规范浮点数,不同编译器处理结果可能不同。 所以,不要写出这样的代码。

bdmh
bdmh   Ds   Rxr 2015.05.25 21:06

类型不匹配,第二种把a的值转为浮点型了,而第一种没这功能

marbella
marbella   2015.05.25 21:09

要执行的一个变量“int”一个printf不应该使用“%f”

yjhtd
yjhtd   2015.05.25 21:10

首先,第二个赋值运算我就不解释了。第一个主要用到一个知识点:计算机存入一个数据,比如说a=5,如果你要输出%f。其实就是把存5这个数字的整型的二进制解释为浮点型输出。

qq_23925665
qq_23925665   2015.05.25 21:39

类型不匹配,需要把a的值转为浮点型了,printf 的参数并不会自动做类型转换的。所以需要另写赋值语句

hanST123
hanST123   2015.05.25 21:41

从VC6.0的调试结果来看,那就是在程序所使用的DLL中没有合适的函数去处理printf函数所遇到的这种状况。
以下是VC给出的信息:
Loaded 'ntdll.dll', no matching symbolic information found.
Loaded 'C:\Windows\SysWOW64\kernel32.dll', no matching symbolic information found.
Loaded 'C:\Windows\SysWOW64\KernelBase.dll', no matching symbolic information found.
Loaded 'C:\Windows\SysWOW64\user32.dll', no matching symbolic information found.
Loaded 'C:\Windows\SysWOW64\gdi32.dll', no matching symbolic information found.
Loaded 'C:\Windows\SysWOW64\lpk.dll', no matching symbolic information found.
Loaded 'C:\Windows\SysWOW64\usp10.dll', no matching symbolic information found.
Loaded 'C:\Windows\SysWOW64\msvcrt.dll', no matching symbolic information found.
Loaded 'C:\Windows\SysWOW64\advapi32.dll', no matching symbolic information found.
Loaded 'C:\Windows\SysWOW64\sechost.dll', no matching symbolic information found.
Loaded 'C:\Windows\SysWOW64\rpcrt4.dll', no matching symbolic information found.
Loaded 'C:\Windows\SysWOW64\sspicli.dll', no matching symbolic information found.
Loaded 'C:\Windows\SysWOW64\cryptbase.dll', no matching symbolic information found.
Loaded 'C:\Windows\SysWOW64\imm32.dll', no matching symbolic information found.
Loaded 'C:\Windows\SysWOW64\msctf.dll', no matching symbolic information found.
Loaded 'C:\Windows\SysWOW64\uxtheme.dll', no matching symbolic information found.
Loaded 'C:\Windows\SysWOW64\dwmapi.dll', no matching symbolic information found.
Loaded 'C:\Windows\SysWOW64\ole32.dll', no matching symbolic information found.

qq_23599965
qq_23599965   2015.05.25 22:08

printf中不自动进行类型转换

caozhy
caozhy   Ds   Rxr 2015.05.25 22:13

float b = a;
其实是
float b = (double)a;
发生了一个隐式类型转换。
换言之,a并不是直接复制给了b,而是有一个转换的过程在里面的。

sushuangju
sushuangju   2015.05.25 22:43

printf是直接把内存中的二进制表示的数据根据格式化字符串%d、%f等打印,不进行转换。

共11条数据 1 尾页
Csdn user default icon
上传中...
上传图片
插入图片