我的目标是取两个数字,看看它们之间的比特差异是多少。
例如:
编号A:01011 0111
B号:11011 0101
这两个数字之间的差异为2,因为有两个不同的位。有没有简单的方法来进行这种计算而不需要使用一些大算法来分解这两个数字?
答案 0 :(得分:1)
从0循环到要检查的位数(我将选择32),通过当前"位索引"将两个数字进行位移,如果按位AND {增加差值计数} {1}}(得到第一位)这两个数字是不同的。
1
示例:
public static int difference(int num1, int num2) {
int count = 0;
for (int i = 0; i < 32; i++) {
if (((num1 >> i) & 1) != ((num2 >> i) & 1)) count++;
}
return count;
}
要查看的位数取决于您的数据类型:
difference(0b010110111, 0b110110101); // result: 2
- 64位long
- 32位int
- 16位short
- 8位答案 1 :(得分:1)
public static int difference(int num1, int num2) {
int count = 0;
int xor = num1 ^ num2;
for (int i = 0; i < 32; i++) {
if ((xor >> i) & 1) count++;
}
return count;
}
此版本来自Hamming Distance Wikipedia article:
public static int difference(int num1, int num2) {
int count = 0;
int xor = num1 ^ num2;
while (xor != 0) {
count++;
xor &= xor - 1;
}
return count;
}
答案 2 :(得分:0)
一个简单的实现是将两个二进制数转换为字符串并比较每个字符,如下所示:
int count = 0;
for(int i = 0; i < String1.length() && i < String2.length(); i++)
{
if(String1.charAt(i) != String2.charAt(i))
count++;
}
这是我能想到的最简单的实现。