2015-04-23 70 views
1
int main() 
{ 
    char boolean[][6]={"TRUE","FALSE"}; 
    printf("%s",boolean[(unsigned int)-1 == ~0]); 
} 

執行後,我得到它爲FALSE。是什麼原因?thic C代碼的輸出是什麼?我需要解釋

+0

你應該問誰寫了這段代碼,他們爲什麼會在索引0處放置「TRUE」,在索引1放置爲「FALSE」。因爲它與'#define TRUE 0'沒什麼區別。 – Lundin

回答

11

因爲

~0 == 0xffffffff (the ~ operator inverts all bits) 

(unsigned int)-1 == 0xffffffff 

(0xffffffff == 0xffffffff) == 1 

你的表情歸結爲

boolean[1] 

其中

"FALSE" 
2

這是一個精神把戲。

(unsigned int)-1 == ~0 
0xffffffff == 0xffffffff 
1 

boolean[1]FALSE,所以輸出是正確的。

但是在你的腦海裏,病情擴大到true那麼爲什麼輸出FALSE

答案:boolean[]數組中元素的排序是錯誤的,或者至少不是應該給出預期結果。

它沿

#define TRUE 0 
#define FALSE 1 

,然後不知道爲什麼C編譯器「忽略」爲真值和代碼「新規」的臺詞就是突然變得馬車和令人費解。

+2

FALSE的唯一有效定義是#define FALSE('-'-'-')'。當然,TRUE可以安全地定義爲'#define TRUE('+'+'+')',它立即結束了將條件與TRUE進行比較的壞習慣。 –