牛客16909题解:位运算经典,二进制位不同个数计算
一、问题理解
牛客16909题要求计算两个整数的二进制表示中不同位的数量,这在错误检测、密码学、图像处理等领域有广泛应用。
二、算法核心思想
三、完整代码实现(带注释)
#include <iostream> using namespace std; int countBitDiff(int a, int b) { // 异或运算得到不同位为1的结果 // 例如:5(0101) ^ 3(0011) = 6(0110) int xor_result = a ^ b; int count = 0; // 计算1的个数(汉明重量) while (xor_result) { // 检查最低位是否为1 count += xor_result & 1; // 右移一位,相当于除以2 xor_result >>= 1; } return count; } int main() { int a, b; cin >> a >> b; // 输出距离 cout << countBitDiff(a, b) << endl; return 0; }
四、关键点解析
异或运算:a ^ b 的结果中,1的位表示a和b在该位不同
位计数:通过循环和位操作统计1的个数
时间复杂度:O(log(max(a,b))),取决于数字的二进制位数
原创内容 转载请注明出处