この声明はどういう意味ですか?
isChecked = isChecked ^ 1;
isChecked
ですBOOL
。
「^」は排他的 OR 演算であるため、0 は 1 に反転し、1 は 0 に反転します。結果は と同じになりisChecked = !isChecked
ます。
の最後のビットのみを反転しBOOL
ます。論理的に否定する信頼できる方法ではありません。誰かが aBOOL
変数を何らかの数値、たとえば 5 に設定するほど狂っている場合、それを行う^ 1
と、値の最後のビットが 4 に反転するだけで、これはまだ に評価されYES
ます。
論理的に否定したい場合は、!
代わりに演算子を使用してください。
isChecked を 1 で XOR するので、true ^ 1 = 0(false) および false ^1 = 1(true) と仮定します。
誰もがブール値の XOR を行っていると言っていますが、これは本当です。しかし、ここでの目的は、ブール値をトグルすることです。
このようにビット単位のトグルを行う利点は、速度とビットを非常に詳細に操作できることです。
より多くのビット演算子
^
排他的 or演算子です。
あなたの例では、トグルを作成するために使用されています -以前に設定されていなかったisChecked
場合にのみ設定されisChecked
ます。
これはビット単位の XOR 演算子であり、0 を 1 に、1 を 0 に変更します。ここですべての演算子を参照してください。