簡體   English   中英

~0 vs.0.0與C中的1

[英]~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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM