2013-02-01 39 views
17

我認爲這是一個簡單的問題,但我正在努力與以下。例如,在我有下面的語句(語言爲C):如果語句整數

int foobar 

if (foobar) 
{ 
// do something. 
} 

現在,如果我對這個正確的,當foobar的不是零這個說法是正確的。所以它應該與if(foobar!= 0)相同;

但是,如果foobar變成負數會發生什麼?

回答

35

負面或正面。任何非0是在if

另外一個真值,考慮一個負數:-1

在C -1內部被表示爲:0xFFFFFFFF,在這種情況下,這將是如果一個正數我將它轉換爲無符號整數。

但是在C99標準編譯器出現後,我建議你用 <stdbool.h>來代替。使得猜測工作少了很多:

Read here about stdbool.h

+2

負數的表示是實現定義的。這個問題並不重要,只有*值*很重要,不管它是如何表示的。在這種情況下,'int'不會被轉換爲'unsigned int'。 –

2

一樣,

if (foobar) 

意味着foobar的不是零因此無論是正面或負面沒關係,但它仍然是不爲零

0

如果foobar是一個負數(它仍然不是零),那麼你的語句應該返回true,但是你應該避免這樣的測試,因爲測試那些可能具有不同「真」值的變量不是最佳實踐。

+0

這正是我想要避免的,它進入了一個未知的狀態。我在別人的程序中看到了這行代碼,然後它打了我。爲什麼使用這個語句而不是if(foobar!= 0);現在我明白了。非常感謝我的問題! –