[英]~0 vs. !0 vs. 1 in C
我今天正在讀一些我認為合理的程序員的代碼,我注意到他們用a =~0
來設置一個循環退出變量。
是否有任何令人信服的理由這樣做而不是簡單地quit = 1;
?
在我繼續改變它之前,我大多只是好奇。 謝謝!
例:
while(!quit){
...;
if(!strcmp(s, "q"))
quit=~0;
}
除非其他一些代碼測試以不同的方式quit
,例如測試任何其他位,否則沒有充分的理由。 !0
是1,但在所有現代架構中, ~0
都是-1。
在某些架構上,0比0更快,但是任何體面的編譯器都應該優化它。
~0
通常為-1,而!0
定義為1。
當然!~0
和!!0
都為0,所以沒有令人信服的理由使用一個或另一個,除了一個事實,即~0
非慣用的(意思是人們不知道到底什么你'干嘛)。
在C中,〜是用於恭維的一元運算符,它將位翻轉到它們的相反狀態。 所以從技術上來說代碼是有效的,因為if()子句只評估是否存在0(假)或任何非0(真)。 坦率地說,我認為評估真假是有點過分。 如果我真的按比例進行評估,我只會考慮使用它。 也許可能會有一個關於性能的爭論,但我對此表示懷疑。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.