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,都是作為 真 來解讀的,所以,括號內的值就是 真 條件總是滿足,這一部分就等同於沒寫,即直接執行後面所跟的語...