我有一个问题,我需要找到两个整数之间的匹配位数(从左到右)
输入:2变量A和B来存储我的十进制数
输出:A和B中匹配的位数(从左侧开始)
一些例子:
A = 3 and B = 2
,A和B位最多匹配左位的7位
A = 3 and B = 40
,A和B位从左位开始匹配7位。
如何使用按位运算(AND,OR,XOR)?
由于
答案 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