东方博宜OJ 2099:A 变 B ← 位运算

【题目来源】
https://oj.czos.cn/p/2099

【题目描述】
给定两个正整数 A,B(十进制)(0<A,B<2^63),当 A,B 用二进制数表示的时候,问把 A 变成 B 至少需要改变多少位?
例如:A=3,B=6,则 A,B 对应的二进制数分别是 011,110,显然,把 A 变成 B 至少需要改变两位。(这里的改变了多少位,指的是 A 和 B 转 2 进制后右对齐看有多少位不相同)

【输入格式】
输入两个正整数 A,B,以空格隔开。​​​​​​​

【输出格式】
输出把 A 变成 B 至少需要改变多少位。

【输入样例】
9 12

【输出样例】
2

【数据范围】
0<A,B<2^63

【算法分析】
由于给定的两个十进制正整数 A,B 的取值范围为 0<A, B<2^63,故需声明为 long long 型。
若声明为 int 型,提交测评时将报错。

【算法代码】

#include <bits/stdc++.h>
using namespace std;

int main() {
    long long a,b;
    int cnt=0;
    cin>>a>>b;

    while(a>0 || b>0) {
        if((a&1)!=(b&1)) {
            cnt++;
        }
        a>>=1;
        b>>=1;
    }
    cout<<cnt<<endl;
    return 0;
}

/*
in:9 12
out:2
*/



【参考文献】
https://blog.csdn.net/hnjzsyjyj/article/details/148343435
https://blog.csdn.net/hnjzsyjyj/article/details/161194680

 

posted @ 2026-07-09 22:40  Triwa  阅读(7)  评论(0)    收藏  举报