我们有两个低位具有相同位模式的数字。例如:010011 10110和 10110 是两个数字,它们与它们的低位匹配。
有没有一种简单的方法可以找出答案?我有一个移动位然后比较的解决方案,有没有更好的方法?
我们有两个低位具有相同位模式的数字。例如:010011 10110和 10110 是两个数字,它们与它们的低位匹配。
有没有一种简单的方法可以找出答案?我有一个移动位然后比较的解决方案,有没有更好的方法?
您可以将它们一起异或并检查最后 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 的数量以计算出匹配的位数。在这种情况下,您可能会执行其他一些技巧。
用 屏蔽数字&
:
if (number1 & 0x1f == number2 & 0x1f)