[英]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 ( !
) 有幾個優點:
xor
快(它有兩個參數而不只需要一個)當您使用短變量名時,輸入不會少:
例如a =! a
a =! a
比a ^= true
短a ^= true
不是因為它更具可讀性,而是因為它實際上傳達了您打算做什么。 您想要否定邏輯值,而不是執行 XOR 操作。
我想指出的 XOR 方法的一個好處是,您不需要對是否發生否定進行硬編碼。
bool isNegated;
//... later
return value ^ isNegated;
超過
return isNegated ? !value : value;
當我不介意引入分支時,我仍然使用后者來提高可讀性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.