匹配位算法

时间:2013-04-19 10:21:12

标签: bit-manipulation bit

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

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

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

一些例子:

A = 3 and B = 2,A和B位最多匹配左位的7位

A = 3 and B = 40,A和B位从左位开始匹配7位。

如何使用按位运算(AND,OR,XOR)?

由于

3 个答案:

答案 0 :(得分: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
}

答案 1 :(得分:0)

做(XNOR B)以找到匹配的数字:

10101010
01001011
--XNOR--
00011101

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

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

答案 2 :(得分: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