题目2 : Exam08_ChangeBit
时间限制:2000ms
单点时限:1000ms
内存限制:256MB
描述
给定两个整数A和B,需要改变几个二进制位才能将A转为B。
输入
1行:A和B,空格隔开
输出
需要改变的位数
样例输入
10 8
样例输出
1
思路:
这个其实还是考按位与!!!
什么时候会改变,就是两个数的同一位不同的时候会改变
比如10和8,只有倒数第二位不同,所以只需要改变一次
即同一位如果不一样就要改变
这就要用到按位与
怎么比较每一位呢
那就要边移动边比,也就是移动符号,不难,详见代码
答案:
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int main()
{
int A,B;
cin>>A>>B;
int num = 0;
for(int i = 0;i < 32;i++)
{
if(((A>>i)&1)!=((B>>i)&1))//同一位如果不一样就要改变
num++;
}
cout<<num;
}