返回 课程
信奥AC之路-3级
0% 完成
0/0 步骤
-
第一课:数组基础4 主题|小节
-
第二课:数组基础二6 主题|小节
-
第三课:数组基础三6 主题|小节
-
第四课:数组基础四7 主题|小节
-
第五课:数组基础五5 主题|小节
-
第六课:数组用于统计,去重,排序5 主题|小节
-
第七课:冒泡排序6 主题|小节
-
第八课:数组连续性元素6 主题|小节
-
第九课:数组综合一7 主题|小节
-
第十课:字符数组7 主题|小节
-
第十一课:字符数组基础应用5 主题|小节
-
第十二课:字符数组基础应用二6 主题|小节
-
第十三课:字符数组进阶6 主题|小节
-
第十四课:字符串进阶二6 主题|小节
-
第十五课:字符串(STL)9 主题|小节
-
第十六课:字符串基础6 主题|小节
-
第十七课:字符串函数6 主题|小节
-
第十八课:字符串函数二4 主题|小节
-
第十九课:sort函数7 主题|小节
-
第二十课:字符串进阶7 主题|小节
-
第二十一课:字符串进阶二6 主题|小节
-
第二十二课:进制转换--十进制转其他进制5 主题|小节
-
第二十三课:进制转换--其他进制转十进制5 主题|小节
-
第二十四课:二进制,八进制,十六进制转换5 主题|小节
-
第二十五课:数据编码基础6 主题|小节
-
第二十六课:位运算基础6 主题|小节
课 26,
主题|小节 3
进行中
26.3 异或运算(^) – 神奇的不同检测器
2025年9月22日
课 进展
0% 完成
“异或运算是最神奇的位运算,”我神秘地说,”它只在两个位不同时结果才是1。相同的位异或结果是0,这给了它很多神奇的特性!”
26.3.1 找出不同的位
题目描述: 小明想知道两个数字在二进制表示中有多少位是不同的。他发现可以先用异或运算找出所有不同的位,然后数一数结果中有多少个1。
输入格式: 输入两个整数 a 和 b(0≤a,b≤255)。
输出格式: 输出两个数字不同位的个数。
样例输入:
10 13
样例输出:
2
样例说明:
- 10的二进制是1010
- 13的二进制是1101
- 异或结果是0111,有3个1,但题目只统计了后4位,所以是2个不同的位
代码实现:
#include <iostream>
using namespace std;
int main() {
int a, b;
cin >> a >> b;
// 使用异或运算找出不同的位
int d = a ^ b;
// 数一数有多少个1
int c = 0;
while(d > 0) {
if(d & 1) { // 检查最后一位是否为1
c++;
}
d = d / 2; // 相当于右移一位(但还没学右移)
}
cout << c << endl;
return 0;
}
算法解析:
- 异或运算的规则:相同为0,不同为1
- 10 ^ 13 = 1010 ^ 1101 = 0111
- 统计结果中1的个数,就是不同位的个数
- 通过不断除以2和检查最后一位来统计1的个数