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