整數型態的除法
對新手來說很重要的觀念!
請思考的程式碼印出結果,究竟會印出0.5或是0?
#include <stdio.h>很多新手應該會選擇0.5吧!確實~以人類思考角度來看0.5應該是正確的,可是在C語言看來0才是正確解答。
int main() {
int a = 10 ;
int b = 20 ;
printf("%f\n", a/b) ;
system("pause") ;
return 0 ;
}
在C語言中,除法分為整數除法與浮點數除法。
- 整數除法
電腦僅會算到整數值,至於小數(分數)部分直接省去,並且是無條件捨位。 - 浮點數除法
電腦會一路除下去,直到表示位數的最小位數,採用四捨五入。
那究竟什麼時候採用整數除法又什麼時候採用浮點數除法呢?當然不是看電腦心情隨機決定XD
端看除法兩邊的運算元來決定,如果除法的兩個運算子其中一個為浮點數型態(float或double)則電腦就會採用浮點數除法,否則就採用整數除法。上面的例子會採用整數除法,原因是變數a與b都是整數型態,因此採用整數除法。
接著再看以下範例,答案將會是0.666667。
#include <stdio.h>
int main() {
float a = 2 ;
float b = 3 ;
printf("%f\n", a/b) ;
system("pause") ;
return 0 ;
}
3 則留言:
float 在宣告有給值,最好能在值後面加上f以代表為float
float a = 2f ;
float b = 3f ;
如果沒加的話,我沒記錯的話有的compiler會出現error或者認定該值為double type
你的觀念是正確的
由於小數型別存在著浮點數與倍精浮點數兩種型態,因此如果是使用浮點數型別則應該於數值後端加入'f'或'F'修飾字元以告訴編譯器確切的資料型別,否則編譯器將認定該常數型別是倍精浮點數。
以此例來說,由於是將常數指定給浮點數型別的變數a,現在的編譯器都會自動轉換型別為對應的型態,因此不會有編譯錯誤訊息。
==================================
對應觀念
如果希望長數被視為是long double型態,則應於常數最後加入'l'或'L'修飾字元。
謝謝指導 :)
C語言沒記錯的話是五捨六入吧
張貼留言