比较两个二进制数,得到不同的位
Compare two binary numbers and get the different bits
可能重复:
计算32位整数中集合位数的最佳算法?
我想写一个程序,在比较两个数字时得到1的位数。如果我比较任何两个数字之间的位数找出二进制数在1和0中的不同之处。换句话说,异或(XOR)关系。
如if 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
相关文章:
- 如何在C++中比较两个char数组
- 在c++中获取两个大int,并将它们存储在数组中
- 如何以优化的方式同时迭代两个间距不相等的数组
- 运算符重载 (+),用于添加两个具有 C++ 的数组
- 将字符串拆分为标记,并将标记拆分为两个单独的数组
- 可以将两个相同类型的连续数组视为一个数组吗?
- C++递归来决定数组中的两个值
- 如何将字符串和整数读取到两个单独的动态数组中的程序编写?
- 给定一个大小为 N 的数组 S,检查是否可以将序列拆分为两个序列
- 在 char* 数组中添加两个索引
- 从两个 4x64 位整数数组中获取取模
- C++两个对象,其中包含指向同一数组不同部分的指针
- 添加两个二进制数(整数数组)
- 如何在位级别添加两个二进制数时忽略一个位块
- 二进制的两个整数的乘积
- 在C++中添加两个二进制数组
- 给出两个二进制数,将一个子集从一个复制到另一个
- 比较两个二进制数,得到不同的位
- c++中两个二进制数相加的函数
- 用一个阈值比较两个二进制数组(近似匹配)