簡體   English   中英

XOR 或 NOT 用於否定變量

[英]XOR or NOT for negation of a variable

在執行布爾變量的否定,XOR 或 NOT 時,我在徘徊什么是更好/首選的做法?

bool someVariable;

我什至不知道為什么,但我總是使用 XOR,我只是更喜歡它:

someVariable ^= true;

但是,更明顯的方法是使用 NOT:

someVariable = !someVariable;

我可能正在使用第一種方式,所以我不需要兩次輸入變量的名稱,從而減少出現某些錯誤、拼寫錯誤等的可能性。如果變量長於幾個字符,輸入的字符也會更少:)

但是,對於不使用此技巧的任何人來說,第一種方法在第一次查找時並不是很明顯。

此外,恕我直言,XOR 更具可讀性,因為您確定對變量應用了否定。 NOT 可能有兩個不同的變量,如果名稱看起來相似,很容易錯過:

affect = !effect;

這兩種方法的優缺點是什么? 我應該使用什么? 還是只是個人喜好問題?

語義

始終選擇語義合理的代碼。 someVariable ^= true; 肯定是正確的,但可能需要考慮它對不習慣這種否定版本的讀者的作用(以及為什么)。

someVariable = !someVariable; 對它在做什么非常明確:它否定someVariable沒有任何可能性也不需要解釋它。

進一步的影響

此外,它可能是一些代碼分析軟件,可以做任何它也許能(優化,誤差分析,...)用! -version,但在相當意外的^語句中失敗。 在編譯期間,可能會發生 XOR 版本較慢的情況,因為(取決於平台)可能需要在執行操作之前將true加載到另一個寄存器中。 這種影響可能在所有情況下都可以忽略不計,但使用的附加寄存器可能不是。

恕我直言,您應該使用 NOT 方法,因為它的方式更具可讀性,並且可以立即理解發生了什么。

我可能正在使用第一種方式,所以我不需要兩次輸入變量的名稱,從而減少出現某些錯誤、拼寫錯誤等的可能性。如果變量長於幾個字符,輸入的字符也會更少:)

如果您使用的是 IDE,無論哪種方式,您都不會輸入超過幾個字符:)

但是,對於不使用此技巧的任何人來說,第一種方法在第一次查找時並不是很明顯。

絕對真實。 我以前從未見過這個。

我應該使用什么? 還是只是個人喜好問題?

好吧,代碼編寫一次,但閱讀多次,因此您應該選擇大多數人認為更具可讀性的選項,恕我直言,這是“非”方法。 為按位運算保留按位運算符:)

NOT ( ! ) 有幾個優點:

  1. 對於大多數需要修改代碼的人來說,它更具可讀性。
  2. 它通常比xor快(它有兩個參數而不只需要一個)
  3. 當您使用短變量名時,輸入不會少:

    例如a =! a a =! aa ^= truea ^= true

不是因為它更具可讀性,而是因為它實際上傳達了您打算做什么。 您想要否定邏輯值,而不是執行 XOR 操作。

我想指出的 XOR 方法的一個好處是,您不需要對是否發生否定進行硬編碼。

bool isNegated;
//... later
return value ^ isNegated;

超過

return isNegated ? !value : value;    

當我不介意引入分支時,我仍然使用后者來提高可讀性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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