下位の順序に同じビット パターンを持つ 2 つの数値があります。例: 010011 10110と 10110 は 2 つの数値で、下位の順序と一致します。
これを見つける簡単な方法はありますか?ビットをシフトしてから比較する解決策があります。より良い方法はありますか?
下位の順序に同じビット パターンを持つ 2 つの数値があります。例: 010011 10110と 10110 は 2 つの数値で、下位の順序と一致します。
これを見つける簡単な方法はありますか?ビットをシフトしてから比較する解決策があります。より良い方法はありますか?
それらを 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 の数をカウントする必要があります。この場合、実行できる他のトリックがあるかもしれません。
&
数字を次のようにマスクします。
if (number1 & 0x1f == number2 & 0x1f)