1

ビット演算子のみを使用(|, &, ~, ^, >>, <<)して、以下を置き換えることは可能!=ですか?

// ...
if(a != b){
    // Some code
}
/// ...

==私はそれをどのように行うかを見ましたが、そうではなかったので、これは主に自己利益からです!=

4

6 に答える 6

8
if(a ^ b) {
    //some code
}

動作するはずです。

好みの方法を使用して、その後ろに==追加することもできます^ 0xFFFFFFFF(データ型の長さに一致する適切な量のFを使用)。これにより、値が無効になります(前と同じ!)。

于 2012-09-21T23:35:53.470 に答える
3

a != baとのビット表現に少なくとも1つの異なるビットがあることを意味しbます。XORビット演算子は、両方の入力ビットオペランドが異なる場合は1を返し、それ以外の場合は0を返します。

したがって、XOR演算をaとに適用しbて、結果がゼロに等しくないかどうかを確認できます。

于 2012-09-21T23:35:03.040 に答える
0

はい、これを使用します:

if (a ^ b) { }
于 2012-09-21T23:31:19.990 に答える
0

'!='テストのビットごとのバージョンは次のようになります。

if((a - b) | (b - a)) {
    /* code... */
}

これは2つの減算をORします。2つの数値が同じである場合、結果は0になります。ただし、それらが異なる場合(別名、「!=」演算子)、結果は1になります。

注:上記のスニペットは整数でのみ機能します(これらの整数はおそらく符号なしである必要があります)。

ただし、「==」演算子をシミュレートする場合は、 「==」をビット演算子に置き換えるでのFabianGiesenの回答を確認してください。

于 2013-01-05T10:54:40.257 に答える
0

x ^ y必ずしも十分ではありません。を使用し!!(x ^ y)ます。1ビットの戻り値を期待する値は、x ^ y1より大きい余りが残るため、機能しません。

于 2018-01-27T01:06:01.440 に答える
-2

「〜」はNOTに等しいので、機能するはずです。例は「a&〜b」です。

于 2012-09-21T23:39:15.253 に答える