#include <bits/stdc++.h>
using namespace std;
int main()
{
int num1,num2,res=0;
cin>>num1>>num2;
string s1="",s2="";
while(num1)
{
s1=to_string(num1%2)+s1;
num1/=2;
}
while(num2)
{
s2=to_string(num2%2)+s2;
num2/=2;
}
while(s1.size()>s2.size())
s2="0"+s2;
while(s1.size()<s2.size())
s1="0"+s1;
for(int i=0;i<s1.size();i++)
if(s1[i]!=s2[i])
res++;
cout<<res<<endl;
return 0;
}
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n1 = sc.nextInt(), n2 = sc.nextInt();
n1 ^= n2;
n2 = 0;
while (n1 != 0) {
if ((n1 & 1) == 1) { n2++; }
n1 >>>= 1;
}
System.out.println(n2);
}
}
| import java.util.Scanner; publicclassMain { publicstaticvoidmain(String[] args) { intn; intm; Scanner sc = newScanner(System.in); m = sc.nextInt(); n = sc.nextInt(); inta,b; intcount = 0; for(inti =1; i<32; i++){ a = m & 1; // 位运算,取二进制的最低位 b = n & 1; if(a != b){ count++; } m = m >>> 1; // 右移一位 n = n >>> 1; } System.out.println(count); } } |
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int m=sc.nextInt();
n=n^m;
m=0;
while(n!=0){
++m;
n=n&(n-1);
}
System.out.println(m);
}
}
先将n和m两数进行异或运算,得到的新数的二进制1的个数就等于前两个整数二进制位的不同个数,最后计算新数的1的个数即可。
#include <stdio.h>
int get_different(int x,int y)
{
int a =(x^y);//先计算所有差异位
int count = 0;
for(int i =0;i<32;i++)
{
if((a>>i)&1)//再接着判断即可
count++;
}
return count;
}
int main()
{
int a =0;
int b =0;
scanf("%d %d",&a,&b);
int ret = get_different(a,b);
printf("%d",ret);
} #include <stdio.h>
int diffent_count(int m, int n)
{
int count = 0;
for (int i = 0; i <= 31; i++)
{
if (((m >> i) ^ (n >> i)) & 1)
{
count++;
}
}
return count;
}
int main()
{
int m, n;
while (scanf("%d %d", &m, &n) != EOF)
{
int result = diffent_count(m, n);
printf("%d\n", result);
}
return 0;
} #include <stdio.h>
int main() {
int a, b;
while (scanf("%d %d", &a, &b) != EOF)
{
int c=a^b;
int count=0;
while(c!=0)
{
if(c%2==1)
count++;
c/=2;
}
printf("%d",count);
}
return 0;
}