C語言中a 1 2時printf(「 d」)和printf(「 f」)輸出都是0

2025-07-27 19:41:00 字數 4575 閱讀 3601

c語言中a=1/2時printf(「%d」)和printf(「%f」)輸出都是

1樓:擺渡人生

對於 第一種情況 a結果是0 因為是求模 所以輸出什麼型別都為0

對於第二種情況 a是2 是整形 整形輸出 沒有問題 而 用浮點格式輸出 問題就來了。

浮點在記憶體中 是以四位元組格式 儲存的 (可以檢視課本)所以你的2就相當於符號 而後面全是0 所以最終結果就是0

2樓:網友

1和2都是整形,兩個整形數做運算,結果必然仍然是整形,所以1/2==0,才是。

3樓:網友

都是整數,所以結果1/2,即也被轉換成了整數0你換成。

或者1/就行了。

只要運算的變數有乙個是 小數, 運算結果就會是小數的。

c語言中 int a=1 printf(「%f」,a) 輸出的為什麼是0? 不是1.0呢?

4樓:蹇冠盛惜海

int是整型,2個位元組,float是浮點型佔用4個位元組,所以,如果,用浮點輸出,變數i的前兩個位元組是0,所以,輸出是0,強制轉換可以改變資料的儲存型別。

5樓:網友

printf 的引數並不會自動做型別轉換的。

例子中格式串中有「%f」,編譯器就會當後邊的引數是個浮點數,它不做型別檢查。

而把乙個 int當成浮點數,因為兩種型別的儲存結構是完全不同的,後果就難以預料了,有可能程式崩潰,也可能正常執行,但得不到正確的結果。

具體到樓主這個問題, 把整數1當成浮點數處理,那就是符號位0,階碼0,尾數1,是非規範浮點數,不同編譯器處理結果可能不同。 所以,不要寫出這樣的**。

6樓:明天未來

這個我試了,好象不同的編譯器輸出的結果不一樣,我用的g++(就是windows的c++)結果卻是-1然後後面是亂碼(用的是int a=1 printf(「%f」,a) )但是編譯的時候有警告,提示說,第乙個引數是double,而第二個引數的型別是int。你最好轉換就不會出錯。

我改為:printf("%f",(float)a)

結果是,這也是學c/c++要注意的問題。不然有時候會得不到正確的結果。

7樓:小灬寶丶

那是因為整型和浮點型在記憶體中的儲存方式是不一樣的,整型是分配連續的空間,將整型數轉換為二進位儲存,而浮點型則是符號,小數部分,指數部分分別儲存,所以列印的時候會輸出0,而不是;顯示型別轉換就是指明要轉換的型別,例如int a=1;int b=;int c=(int)b;float d=(float)a;強制型別轉換就是顯示轉換,他並不能改變引數的本身型別就比如說float c;int a;c=(float)a;是把a強制型別轉換成float後的值賦給了c,a的型別並沒有改變,仍然是int。

int a=1;printf ("%f",a);為什麼輸出為0?我知道是%d不是%f

8樓:匿名使用者

不同的資料儲存格式不一樣,正因為如此,c語言才設計了不同的格式化符號來對應識別資料並輸出正確格式。

不要混用,既然知道,何苦還混用。

printf ("%f",float(a));

c語言1/2為什麼輸出0啊

9樓:網友

c語言中 整數與整數作除法時有 「趨零」

就是 6/4 ,在c中得出的結果是1,而不是最後的結果取的是比原來小的整數。

lz 所說的 1/2 計算結果已經是0,即使資料型別 是float

10樓:網友

1和2都是整。

bai形數,1除以2的,但是du他會預設將結果轉為整形zhi,就dao是0,輸出的時候是float型,所以將回結果0轉換答為float型,就是。

要想輸出,在1/2前加上強制轉換(float)

11樓:

1/2 1和2都是按照int型計算的,所以得數是0,在轉換為float型還是。

printf("%f",; 就能獲得正確答案了。

12樓:鄂渚緒風

因為你的被除數是1,是乙個int型別的數,輸出結果也是乙個int型別的,這裡專就是零的;如果要輸屬出的是,那你就要把1改為,這樣被除數就是乙個float型別的數了,輸出結果也將是乙個float型別的數。希望能幫到你!

13樓:網友

應該改成printf("%f",,1是以整數(int)計算的,而改成就是以小數(float)計算的了。

14樓:網友

因為1/2是整數的除法,結果是整數,所以為0的,你要得到小數的話,改為就好啦。

15樓:網友

1/2是按整形計算的,不足1的哪怕就是,都截為0.想輸出,寫成,或,或1/,就是後面兩種不太規範,屬於系統自動轉換的。

為什麼c語言輸出全是

16樓:網友

scanf("%d",&x) //這裡應該是%f

printf("%f%f",&y,&o); //這裡&y,&o應該改成y,o

17樓:匿名使用者

這個地方會出錯。

scanf("%d",&x);

d不是對浮點做的。

c語言中,float a=2.1;printf("%f",a);輸出結果為2.100000 問題

18樓:匿名使用者

你一定是基礎沒學好,儲存本身乙個位元組等於8位,每一位可以儲存0或者1,4個位元組就是32位,如果全是1的話換算成十進位大約是42億左右,也就是10位數,除去正負號和小數點,剩下8位數。

19樓:網友

float預設保留小數6位,可以通過列印控制顯示的小數位數。

printf("%.2f",a); 只列印兩位小數。

20樓:網友

你把乙個位元組當做一位嗎?

在c環境中,定義t為double型的,t=1/2,用printf輸出顯示時為何答案是0.00000?

21樓:風吹雨霖鈴

t = 1 / 2, 系統會先運算 1 / 2, 由於1和2的預設資料型別是 int, 所以 1 / 2 運算後的結果也是 int

不可能是, 只能是0, 然後系統把0 轉換成 double 即為, 賦給t, 所以輸出的t 是 ,如要輸出 可用 t = / 2, 或者 t = (double)1 / 2;

22樓:流淚殤

c中對於/運算,他的運算元可以為整型或實型的常量、變數和函式。當x/y中如果兩個運算元中有乙個是實型,運算結果為實型數,如果兩個運算元都是整數,就像你給的那種,運算結果為整數(即小數部分捨去了),所以你的結果錯了。

把分子改成小數就行了。

23樓:網友

因為1和2都是整型。

他們相除的結果也是整型 也就是等於0

賦值給double型別的t

所以t的值為。

你可以這樣修改。

t=;這樣輸出的結果就讓你滿意了。

24樓:陸成無敵

1和2都是整形,計算結果所以也是整形(即1/2=0,其實還有餘數但被省了)

t=;也可。

t=(double)1/2;也可。

這好想是那本書上寫的,建議你係統的看一本書,絕對大有益處。

25樓:網友

#include

void main()

強制型別轉換為double型!

26樓:網友

1和2都是整數,編譯器會把1/2當作1整除2,商是整數,結果為0。

a=1/2;這行可以改成下面任意一種形式,就能輸出正確結果了:

a=1f/2;

a=1/2f;

a=1f/2f;

f或者f是浮點數(float)常量字尾,1f是乙個浮點型常量,和整型常量5是不同的概念。

只要除數或被除數中有乙個是浮點數,那麼「/」會被理解為浮點數除法,結果也是浮點數。

另外,寫成。

a=;a=1/;

a=;a=1d/2;

a=1/2d;

a=;a=1f/;

a=;……之類結果也是一樣的,d或d是雙精度浮點數(double)常量字尾。之類的寫法和字尾d表示相同。不過由於double比float精度高,有double參與除法時結果為double型別,賦值給float a時double自動轉換為float型會損失精度,編譯器可能會給出警告。

也可以利用顯式強制型別轉換:

a=(float)1/2;

a=1/(float)2;

a=(float)1/(float)2;

float)是強制型別轉換運算子,表示強制轉換後續運算數為float型別。強制型別轉換運算子的優先順序高於算術運算子「/」,所以進行除法運算的是經過強制型別轉換後的數(float型),而不再是兩個整數。因為強制型別轉換生成了臨時物件,效率比直接常量表示要低。

c語言中0x12什麼意思,C語言中0x12什麼意思

就是十六進位制12h,等於十進位制18。具體還與所使用的場合有關。int c 0x12 就等同於int c 18 char c 0x12 就是 ch 18 它是乙個非列印字元 char s 0x12 則它佔用5個位元組,分別是 0 0 x 1 2 0 然而要想用printf s s 或puts s ...

在C語言中,12等於多少,c語言中12等於多少

等於0。1 這個屬於位運算,是邏輯相與運算 是邏輯異或運算 是邏輯同或運算。2 解決這類題目,關鍵在於找到這些數字所代表的2進製數,然後再按照邏輯運算關係做。c語言運算子即在 c語言 中的運算子,運算子是告訴編譯程式執行特定算術或邏輯操作的符號。c語言的內部運算子很豐富,運算範圍很寬,除了控制語句和...

C語言if12怎麼解釋,在C語言中,ifa1b2是什麼意思?

這個bai寫法是錯誤的。在duc語言中整個邏輯表示式應zhi該被完整地寫在一dao個圓括號中。所以,上回述表示式應答 當寫為 if 1 2 實際上,如果真就直接這麼寫的話,因為1和2都不為0,都是作為 真 來解讀的,所以,括號內的值就是 真 條件總是滿足,這一部分就等同於沒寫,即直接執行後面所跟的語...