比较两个二进制数并得到不同的位
可能重复:
计算32位整数中设定位数的最佳算法?
我想编写一个程序来比较两个数字,得到1的位数。如果比较两个数字之间的位数,找出二进制数字在1和0中的不同位置。 换句话说,异或(XOR)关系。
如果22(其具有10110二进制)并且将其与15(其具有01111二进制)进行比较,
第一个10110
第二个01111
结果11001
答案是25,但我想得到的是3,其中有三个1和0是不同的。
Hrmmm是我想到的第一个非递归的想法:
int a = ...;
int b = ...;
int x = a ^ b;
int count;
for (int i = 0; i < 32; ++i) {
if (x & (1 << i)) {
++count;
}
}
std :: bitset :: count应该做你正在寻找的东西:
http://www.cplusplus.com/reference/stl/bitset/count/
http://en.cppreference.com/w/cpp/utility/bitset/count
这将是最简单的方法:
int count_bits(int a)
{
int mask;
int count = 0;
for (mask = 1; mask; mask <<= 1)
{
if (mask & a) ++count;
}
return count;
}
如果你想要更多的花式看看这里:http://graphics.stanford.edu/~seander/bithacks.html#CountBitsSetNaive
链接地址: http://www.djcxy.com/p/72587.html