0

我有一个问题,我需要找到两个整数之间的匹配位数(从左到右)

输入:2 个变量 A 和 B 来存储我的十进制数

输出:A 和 B 中匹配的位数(从左侧开始)

一些例子:

A = 3 and B = 2, A 和 B 位匹配左起 7 位

A = 3 and B = 40, A 和 B 位匹配左起 7 位。

如何使用按位运算(AND、OR、XOR)来做到这一点?

谢谢

4

3 回答 3

2

将两者异或(产生一个从左边到第一个不匹配元素全为零的数字),然后将结果右移直到等于 0。从您正在处理的整数的位长度中减去它(例如,您似乎在暗示 8 位)。

伪代码:

int matchingBits(A, B) {
    result = A XOR B
    int shifts = 0
    while (result != 0) {
        result = result >> 1 (Shift right the result by 1)
        shifts++
    }
    return integer_bit_length - shifts
}
于 2013-04-19T11:25:16.567 回答
1

执行 (A XNOR B) 以查找匹配的数字:

10101010
01001011
--XNOR--
00011101

然后使用汉明算法来计数:Count number of 1's in binary representation

(顺便说一句:xnor 是 !xor)

于 2013-04-19T11:17:35.027 回答
0

试试这个可能会奏效

int matchingBitsCount(val1,val2)
{
  int i , cnt = 0;
  for(i=7;i>=0;i--)
 {
       if(((1<<i)&a)^((1<<i)&b))==0)  //left shifted for starting from left side and then XOR
       {
       cnt++;
       }
      else
      {
        break;
      }
   }
 }

如果您想检查 int,我将 val1 和 val 2 作为 char,然后只需 i=31

于 2013-04-19T12:29:17.883 回答