看到一個網友的簽名上寫的“c語言中的-1/2沒有定義”,無論是表達什麼意思,自己都好奇的寫了幾行代碼測試下。寫在博客上湊湊數吧,希望各位不要見笑了。應該說代碼是這樣的。
#include <stdio.h>
void main(){
float a = -1/2;
printf("%s%f",a<0?"this is -
":"this is +
",a);
return;
}
我用了一個判斷來驗證正負值。表面上看上去代碼沒有任何問題,但是仔細的看或者你執行以下就知道問題大大的出來了。結果居然是"0",為什麼?我們看看float a =-1/2,float a肯定可以表示負數和小數點的,但是-1/2呢?這雖然是一個數字,但是卻代表的是整型數據,2個整形數據的操作結果依然是整形,等同於代碼float a = (int)(-1/2),-1/2取整結果為0(0不分正負),結果自然就是this is +
0。所以說這個問題是在c中已經有說明的。如果想要自己得到的結果符合所想,那麼代碼應該是這樣:
#include <stdio.h>
void main(){
float a = (float)-1/(float)2;
printf("%s%f",a<0?"this is -
":"this is +
",a);
return;
}
使用c的強制性轉換,將-1、2都轉換成float,那麼得到的結果既然也就是float了。這個時候的到底的結果就是this is -
-0.5000。閃。