类型转换,为什么输出的结果为0?

#include <stdio.h>

int main()

{

int i = 15;

float m = (float)i;

printf("%d\n", m);

return 0;

}

输出的结果为什么为0?
我知道应该是%f而不是%d的格式输出浮点型,但是原因是什么?为什么%d输出浮点型结果为0?

回答:

比如7.5f,二进制是111.1,科学计数是1.111×2^2,符号位S是0,指数为2,移码2+127 = 129;所以阶码为10000001;尾数是111;所以7.5的机器码是0100 0000 1111 0000 0000 0000 0000 0000;但是程序自动把float类型转换为double类型,8个字节,符号位S是0,阶码11位,为00010000001;尾数111,所以机器码为:0000 1000 0001 1110 0000 0000 0000 0000,在内存存储中低位优先:0000 0000 0000 0000 1110 0001 1000 0000
%d 输出的是前4个字节,所以结果为0;

回答:

明明是float,却用%d来输出,这是未定义行为。所谓未定义行为,就是编译器干啥都是可以的,比如给你输出0,或者15,或者垃圾数字,或者干脆程序崩溃掉。

clipboard.png

回答:

表面原因是:你把 float 类型的变量 m 以 %d 的格式输出了

回答:

图片描述

应该就是 %d 的问题 改为 %f 或者 %lf

以上是 类型转换,为什么输出的结果为0? 的全部内容, 来源链接: utcz.com/p/194904.html

回到顶部