1

我们有两个低位具有相同位模式的数字。例如:010011 10110和 10110 是两个数字,它们与它们的低位匹配。

有没有一种简单的方法可以找出答案?我有一个移动位然后比较的解决方案,有没有更好的方法?

4

2 回答 2

6

您可以将它们一起异或并检查最后 N 个低位是否全为零(其中 N 是两个数字中较小的位数)。

例如:使用您提供的样本编号 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 回答