1

下位の順序に同じビット パターンを持つ 2 つの数値があります。例: 010011 10110と 10110 は 2 つの数値で、下位の順序と一致します。

これを見つける簡単な方法はありますか?ビットをシフトしてから比較する解決策があります。より良い方法はありますか?

4

2 に答える 2

6

それらを XOR して、最後の N 下位ビットがすべてゼロかどうかを確認できます (N は 2 つの数値のうち小さい方のビット数です)。

例: あなたが与えたサンプル番号 01001110110 と 10110 を使用すると:

01001110110 XOR 10110 = 01001100000

結果の最後の 5 ビットはすべてゼロであることに注意してください。

C/C++/Java では^、この目的のために演算子を使用し、次のようにマスクを使用して最後の N ビットを抽出できます。

int a = 0x276; // 01001110110
int b = 0x16;  //       10110

if (((a ^ b) & 0x1F) == 0) { // Mask 0x1F assumes least significant 5 bits for match
    // match!
}

もちろん、これは、各数値の有効ビット数 (この例では 5) を知っていることを前提としています。代わりに、一致するビットの数が指定されていない場合は、一致するビットの数を把握するために、連続する末尾の 0 の数をカウントする必要があります。この場合、実行できる他のトリックがあるかもしれません。

于 2012-12-06T07:51:32.483 に答える
1

&数字を次のようにマスクします。

if (number1 & 0x1f == number2 & 0x1f)
于 2012-12-06T07:51:19.970 に答える