int main()
{
char boolean[][6]={"TRUE","FALSE"};
printf("%s",boolean[(unsigned int)-1 == ~0]);
}
執行後,我得到它爲FALSE。是什麼原因?thic C代碼的輸出是什麼?我需要解釋
int main()
{
char boolean[][6]={"TRUE","FALSE"};
printf("%s",boolean[(unsigned int)-1 == ~0]);
}
執行後,我得到它爲FALSE。是什麼原因?thic C代碼的輸出是什麼?我需要解釋
因爲
~0 == 0xffffffff (the ~ operator inverts all bits)
和
(unsigned int)-1 == 0xffffffff
爲
(0xffffffff == 0xffffffff) == 1
你的表情歸結爲
boolean[1]
其中
"FALSE"
這是一個精神把戲。
(unsigned int)-1 == ~0
0xffffffff == 0xffffffff
1
和boolean[1]
點FALSE
,所以輸出是正確的。
但是在你的腦海裏,病情擴大到true
那麼爲什麼輸出FALSE
?
答案:boolean[]
數組中元素的排序是錯誤的,或者至少不是應該給出預期結果。
它沿
#define TRUE 0
#define FALSE 1
,然後不知道爲什麼C編譯器「忽略」爲真值和代碼「新規」的臺詞就是突然變得馬車和令人費解。
FALSE的唯一有效定義是#define FALSE('-'-'-')'。當然,TRUE可以安全地定義爲'#define TRUE('+'+'+')',它立即結束了將條件與TRUE進行比較的壞習慣。 –
你應該問誰寫了這段代碼,他們爲什麼會在索引0處放置「TRUE」,在索引1放置爲「FALSE」。因爲它與'#define TRUE 0'沒什麼區別。 – Lundin