首页 > 试题广场 >

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

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

输入描述:
两个整数


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

输入

22 33

输出

5

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)
更多回答
//建议直接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)
#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)
发表于 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)
#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)
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)
#include<stdio.h>
int main(){
int a, b;
int count = 0;
while (scanf("%d %d", &a, &b) != EOF) {
	for (int i = 0; i < 32; i++) {
		if (((a >> i) & 1) != ((b >> i) & 1)) {
			count++;
		}
	}
	printf("%d\n", count);
}
return 0;
}

发表于 2024-03-30 18:57:13 回复(0)
#include <stdio.h>

int count_one_of_bit(unsigned int n)
{
    int count = 0;
    for(int i = 0; i < 32; i++)
    {
        if(((n >> i) & 1) == 1)
        {
            count++;
        }
    }
    return count;
}
int main() {
    int a, b;
    int c = 0;
   
    scanf("%d %d", &a, &b);
    c = a ^ b;
    int ret = count_one_of_bit(c);
    printf("%d", ret);
    return 0;
}
发表于 2024-02-22 18:40:07 回复(0)
#include <stdio.h>
int main() {
    int a, b,c;
    scanf("%d %d",&a,&b);
    c=a^b;
    int count = 0;//计数
while (c)
{
    count++;
    c = c & (c- 1);
}

printf("%d",count);
    return 0;
}
编辑于 2024-02-20 23:03:48 回复(0)
#include<stdio.h>
int main()
{
    int m = 0;
    int n = 0;
    scanf("%d %d", &m, &n);
    int ret = m ^ n;
    int count = 0;
    while (ret)
    {
        ret = ret & (ret - 1);
        count++;
    }
    printf("%d", count);
    return 0;
}
编辑于 2024-02-02 17:32:07 回复(0)
#define   _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main() {

    int m = 0, n = 0;
    int count = 0;
    scanf("%d%d", &m, &n);
    for (int i = 0; i < 32; i++)
    {
        if (((m & 1) ^ (n & 1)) == 1)
        {
            count++;
           
        }
        m = m >> 1;
        n = n >> 1;

    }

    printf("%d", count);
    return 0;
}
发表于 2023-11-10 19:20:51 回复(0)
#include <stdio.h>

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

int compare(int a,int b)
{
    int count = 0;
    for (int i = 0; i < 32; i++)
    {
        int x = a & (1 << i);
        int y = b & (1 << i);
        if (x != y)
            count++;
    }
    return count;
}

int main() {
    int a, b;
    while (scanf("%d %d", &a, &b) != EOF) 
    { 
        int count = compare(a, b);
        printf("%d\n", count);
    }
    return 0;
}

发表于 2023-10-29 17:08:44 回复(0)
let nums = readline().split(' ');
let str1 = nums[0];
let str2 = nums[1];
let str = (str1^str2).toString(2);
let arr = str.split('').filter(item => item=='1');
print(arr.length)
先异或转为2进制,找出是1的值的个数就行了。
发表于 2020-11-11 17:05:49 回复(0)
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;
import java.util.Queue;
import java.util.Scanner;
import java.util.Stack;

public class Main {

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        int a=sc.nextInt();
        int b=sc.nextInt();
        int c=a^b;
        b=0;
        for(a=0;a<32;a++) {
            
            if(((c>>a)&0x1)==0x1) {
                
                b++;
            }
            
            
        }
        System.out.println(b);

    }
}
发表于 2020-06-05 21:03:31 回复(0)