首页 > 试题广场 >

两个整数二进制位不同个数

[编程题]两个整数二进制位不同个数
  • 热度指数:8301 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
输入两个整数,求两个整数二进制格式有多少个位不同

输入描述:
两个整数


输出描述:
二进制不同位的个数
示例1

输入

22 33

输出

5
#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;
}

发表于 2019-06-18 11:31:28 回复(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);
    }
}
发表于 2019-02-24 22:23:08 回复(0)
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);
    }
}
编辑于 2018-08-19 22:19:01 回复(0)
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的个数即可。
发表于 2019-03-30 10:21:48 回复(0)

python3两行

a, b = map(lambda c: bin(int(c)).replace("0b", "").rjust(32, '0'), input().split())
print(sum(map(lambda c: a[c] != b[c], range(32))))
  • 第一行:统一格式,将a,b转化成32位二进制格式字符串

  • 第二行,对32位分别进行计算判断是相同,将结果累加。

编辑于 2019-02-23 10:13:56 回复(0)
发表于 2023-11-20 22:14:00 回复(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;
}
编辑于 2024-04-09 20:53:30 回复(0)
//建议直接32位bitset存储后比较
#include <bits/stdc++.h>
using namespace std;
int main(){
    int a,b;
    cin>>a>>b;
    int res=0;
    bitset<32> veca(a),vecb(b);
    for(int i=0;i<32;++i)
        if(veca[i]!=vecb[i])
            res++;
    cout<<res;
    return 0;
}

发表于 2019-03-04 10:21:06 回复(0)
两个整数二进制位不同个数C
#include <stdio.h>

int main()
{
    int a = 10;
    int b = -1;
    scanf("%d %d", &a, &b);
    int c = a ^ b;
    int count = 0;
    for (int i = 0;i < 32;i++)
    {
        if ((c & 1) == 1)
        {
            count++;
        }
        c=c >> 1;
    }
    printf("%d", count);
    return 0;
}
发表于 2025-02-22 17:54:11 回复(0)
#include<stdio.h>

int main()
{
    int a = 0;
    int b = 0;
    int count = 0;
    scanf("%d%d", &a, &b);
    int n = a ^ b;
    while (n)
    {
        if ((n & 1) == 1)
            count++;
        n = n >> 1;
    }
    printf("%d", count);
    return 0;
}
发表于 2024-10-16 17:25:02 回复(0)
#include <stdio.h>

int main() {
    int a = 1;
    int x = 0;
    int y = 0;
    int count = 0;
    scanf("%d%d",&x,&y);
    for(int i = 0;i<32;i++)
    {
        if((x&(a<<i))^(y&(a<<i)))
        {
            count++;
        }
    }
    printf("%d",count);
    return 0;
}
发表于 2024-08-16 11:14:28 回复(1)
#include <stdio.h>

int main() {
    int a, b;
    scanf("%d %d", &a, &b) ;
    int i=0;
    int count=0;
    for(i=0;i<32;i++)
    {
        if (((a >> i ) & 1 ) != (( b >> i ) & 1))
        count++;
    }
    printf("%d\n",count);
    return 0;
}
发表于 2023-11-07 22:30:07 回复(0)
#include <stdio.h>

int main() {
    int a, b;
    int count = 0;
    
    scanf("%d %d", &a, &b);

    int c = a ^ b;

    for (int i = 0; i < 32; i++) {
        if(((c >> i) & 1) == 1)
        {
            count++;
        }
    }

    printf("%d", count);

    return 0;
}

发表于 2023-08-27 12:33:54 回复(0)
#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);
}

发表于 2025-04-26 11:00:23 回复(0)
#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;
}


发表于 2025-02-18 15:56:51 回复(0)
#include <stdio.h>
int main() {
    int x,y;
    int count=0;
    scanf("%d %d",&x,&y);
    for(int a=0;a<32;a++)
    {
        if(((x>>a)&1)!=((y>>a)&1))
        count++;
    }
    printf("%d",count);
    return 0;
}
发表于 2025-01-30 15:10:25 回复(0)
#include <stdio.h>
int Find_Diffent(int m, int n)
{
	int num = m ^ n;
	int count = 0;
	int i = 0;
	for ( i = 0; i < 32; i++)
	{
		if ((num >> i) & 1 == 1)
			count++;
	}
	return count;
}

int main()
{
	int m = 10;
	int n = 20;
	printf("%d\n", Find_Diffent(m, n));

	return 0;
}

发表于 2024-10-20 22:56:56 回复(0)
#include <stdio.h>
int main() {
    int a, b;
    int m;
    int count = 0;
    while (scanf("%d %d", &a, &b) != EOF) { // 注意 while 处理多个 case
        m = a ^ b;
        while(m != 0){
            m &= m - 1;
            count++;
        }
        printf("%d", count);
    }
    return 0;
}

发表于 2024-10-06 20:35:09 回复(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;
}

发表于 2024-05-15 11:20:07 回复(0)
go语言代码
package main
 
import (
    "fmt"
)
 
func main() {
    a := 0
    b := 0
    res :=0
    for {
        n, _ := fmt.Scan(&a, &b)
        if n == 0 {
            break
        }
        a = a^b
        for i:=0;i<32;i++{
            temp :=1<<i
            if a&temp>0{
                res++
            }
        }
        fmt.Println(res)
    }
}


发表于 2024-04-07 17:42:00 回复(0)