鍍金池/ 問(wèn)答/C/ 類(lèi)型轉(zhuǎn)換,為什么輸出的結(jié)果為0?

類(lèi)型轉(zhuǎn)換,為什么輸出的結(jié)果為0?

#include <stdio.h>
int main()
{
    int i = 15;
    float m = (float)i;
    printf("%d\n", m);
    return 0;
}

輸出的結(jié)果為什么為0?
我知道應(yīng)該是%f而不是%d的格式輸出浮點(diǎn)型,但是原因是什么?為什么%d輸出浮點(diǎn)型結(jié)果為0?

回答
編輯回答
抱緊我

圖片描述

應(yīng)該就是 %d 的問(wèn)題 改為 %f 或者 %lf

2017年1月12日 15:24
編輯回答
不舍棄

明明是float,卻用%d來(lái)輸出,這是未定義行為。所謂未定義行為,就是編譯器干啥都是可以的,比如給你輸出0,或者15,或者垃圾數(shù)字,或者干脆程序崩潰掉。

clipboard.png

2017年2月5日 06:13
編輯回答
莓森

比如7.5f,二進(jìn)制是111.1,科學(xué)計(jì)數(shù)是1.111×2^2,符號(hào)位S是0,指數(shù)為2,移碼2+127 = 129;所以階碼為10000001;尾數(shù)是111;所以7.5的機(jī)器碼是0100 0000 1111 0000 0000 0000 0000 0000;但是程序自動(dòng)把float類(lèi)型轉(zhuǎn)換為double類(lèi)型,8個(gè)字節(jié),符號(hào)位S是0,階碼11位,為00010000001;尾數(shù)111,所以機(jī)器碼為:0000 1000 0001 1110 0000 0000 0000 0000,在內(nèi)存存儲(chǔ)中低位優(yōu)先:0000 0000 0000 0000 1110 0001 1000 0000
%d 輸出的是前4個(gè)字節(jié),所以結(jié)果為0;

2017年5月14日 00:31
編輯回答
蔚藍(lán)色

表面原因是:你把 float 類(lèi)型的變量 m 以 %d 的格式輸出了

2018年8月23日 13:47