cod*_*001 1 bit-manipulation bitwise-operators
我们有两个数字在较低的顺序中具有相同的位模式.例如:010011 10110和10110是两个数字,它们与较低的顺序匹配.
有没有一种简单的方法来找到它?我有一个解决方案,移动位然后比较,有更好的方法吗?
您可以将它们混合在一起并检查最后N个低阶位是否都为零(其中N是两个数中较小的位数).
例如:使用您给出的样本编号01001110110和10110:
01001110110 XOR 10110 = 01001100000
Run Code Online (Sandbox Code Playgroud)
请注意,结果中的最后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!
}
Run Code Online (Sandbox Code Playgroud)
如果当然,这假设您知道每个数字中的有效位数(本例中为5).如果未指定匹配位数,则需要计算连续尾随0的数量以确定匹配的位数.在这种情况下,您可能会执行其他一些技巧.