ビット演算子のみを使用(|, &, ~, ^, >>, <<)
して、以下を置き換えることは可能!=
ですか?
// ...
if(a != b){
// Some code
}
/// ...
==
私はそれをどのように行うかを見ましたが、そうではなかったので、これは主に自己利益からです!=
。
ビット演算子のみを使用(|, &, ~, ^, >>, <<)
して、以下を置き換えることは可能!=
ですか?
// ...
if(a != b){
// Some code
}
/// ...
==
私はそれをどのように行うかを見ましたが、そうではなかったので、これは主に自己利益からです!=
。
if(a ^ b) {
//some code
}
動作するはずです。
好みの方法を使用して、その後ろに==
追加することもできます^ 0xFFFFFFFF
(データ型の長さに一致する適切な量のFを使用)。これにより、値が無効になります(前と同じ!
)。
a != b
a
とのビット表現に少なくとも1つの異なるビットがあることを意味しb
ます。XORビット演算子は、両方の入力ビットオペランドが異なる場合は1を返し、それ以外の場合は0を返します。
したがって、XOR演算をa
とに適用しb
て、結果がゼロに等しくないかどうかを確認できます。
はい、これを使用します:
if (a ^ b) { }
'!='テストのビットごとのバージョンは次のようになります。
if((a - b) | (b - a)) {
/* code... */
}
これは2つの減算をORします。2つの数値が同じである場合、結果は0になります。ただし、それらが異なる場合(別名、「!=」演算子)、結果は1になります。
注:上記のスニペットは整数でのみ機能します(これらの整数はおそらく符号なしである必要があります)。
ただし、「==」演算子をシミュレートする場合は、 「==」をビット演算子に置き換えるでのFabianGiesenの回答を確認してください。
x ^ y
必ずしも十分ではありません。を使用し!!(x ^ y)
ます。1ビットの戻り値を期待する値は、x ^ y
1より大きい余りが残るため、機能しません。
「〜」はNOTに等しいので、機能するはずです。例は「a&〜b」です。