首页 > 试题广场 >

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

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

输入描述:
两个整数


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

输入

22 33

输出

5
//方法三:&
//int main()
//{
//    int x = 0;
//    int y = 0;
//    int count = 0;
//    printf("输入两个整数:");
//    scanf("%d %d", &x, &y);
//
//    for (int i = 0; i < 32; i++)
//    {
//        if (((x >> i) & 1) != ((y >> i) & 1))
//        {
//            count++;
//        }
//    }
//    printf("count:%d", count);
//
//    return 0;
//}


//方法二:% /
//int main()
//{
//    int a = 0;
//    int b = 0;
//    int count = 0;
//    printf("输入两个整数:");
//
//    scanf("%d %d", &a, &b);
//    for (int i = 0; i < 32; i++)
//    {
//        if ((a % 2) != (b % 2))
//        {
//            count++;
//        }
//        a /= 2;
//        b /= 2;
//    }
//    printf("结果:%d", count);
//
//    return 0;
//}

//方法一:^ &
//int main()
//{
//    int n1 = 0;
//    int n2 = 0;
//    int n = 0;
//    int count = 0;
//    scanf("%d %d", &n1, &n2);
//    n = n1 ^ n2;
//    while (n)
//    {
//        n = n & (n - 1);
//        count++;
//    }
//    printf("count = %d", count);
//
//    return 0;
//}
发表于 2022-03-02 11:14:04 回复(0)
#include <stdio.h>

#pragma warning(disable:4996)

int main()
{
    int a = 0;
    int b = 0;
    scanf("%d %d",&a,&b);
    
    int c = a ^ b;
    //c有多少个1就说明a与b有几个数字不同
    int count = 0;
    while(c){
        count++;
        c = c & (c - 1);
    }
    
    printf("%d\n",count);
    return 0;
}
发表于 2020-11-01 22:00:23 回复(0)
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
	int num1 = 0;
	int num2 = 0;
	int Temp = 0;
	int count = 0;
	printf("请输入两个数来比较他们二进制码不同位的个数:\n");
	scanf("%d %d", &num1, &num2);
	Temp = num1 ^ num2;
	while (Temp != 0)
	{
		count++;
		Temp = Temp & (Temp - 1);
	}
	printf("二进制码不同位的个数为:%d\n", count);
	return 0;
}

发表于 2021-05-07 17:20:46 回复(1)
#include <stdio.h>

int main() {
    int a = 0, b = 0;
    scanf("%d %d",&a,&b);
    int c = a ^ b;//比较ab不同的位
    //计算不同位的个数
    int count=0;
   
    for(int i=0;i<32;i++)
    {
         count += ((c&(1<<i))>>i);

    }
   printf("%d",count);
    return 0;
}
发表于 2024-11-18 20:25:26 回复(0)
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
    int a = 0;
    int b = 0;
    int i = 0;
    int count = 0;
    scanf("%d %d", &a,&b);
    for (i = 0; i < 32; i++)
        if((((a^b)>>i)&1)==1)
        count++;
        printf("%d与%d的二进制表达式中,有%d位不同\n", a, b, count);
    return 0;
}
//a^b
//00000000 00000000 00001111 0011 0100
发表于 2024-07-03 18:59:25 回复(0)
#include<stdio.h>
int count = 0;

int Compare(int n, int m)

{

    int a = n ^ m;

    for (int i = 0; i < 32; i++)

    {

        

        if (((a>>i)&1)==1)

        {

            count++;

        }

    }

    return count;

}

int main()

{

    int n = 0;

    int m = 0;

    scanf("%d %d", &n, &m);

    int ret=Compare(n, m);

    printf("%d\n", ret);

    return 0;

}

发表于 2023-08-08 20:43:29 回复(0)
#include <stdio.h>

int main() {
    int a, b;
    while (scanf("%d %d", &a, &b) != EOF)
    {
        int count =0;
        for(int i=0;i<32;i++)
        {
            if(((a>>i)&1)!=((b>>i)&1))
            {
                count++;
            }
        }
        printf("%d",count);
    }
    return 0;
}
发表于 2023-08-08 20:29:23 回复(0)
#define  _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>


//求两个数二进制中不同位的个数
//按位异或相同为0,不同为1

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

	int ret = a ^ b;//将a和b按位异或的值存入ret中
	int count = 0;
	for (int i = 0; i <32; i++)
	{
		if (((ret>>i) & 1) == 1)//数出ret中有多少个1则可以得出a和b二进制中有多少位不同
		count++;
	}
	printf("%d\n",count);
	return 0;
}

发表于 2023-07-28 18:55:37 回复(1)
#include <stdio.h>

int main() {
    int m, n;
    scanf("%d %d", &m, &n);
    int i = 0;
    int count = 0;
    int a = 0, b = 0;
    for (i = 0; i < 32; i++) {
        a = m & 1;
        b = n & 1;
        if (a != b) {
            count++;
        }
        m = m >> 1;
        n = n >> 1;
    }
    printf("%d\n", count);
    return 0;
}
发表于 2023-07-28 14:36:02 回复(0)
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int i;
int main()
{
    int a = 0, b = 0;
    scanf("%d %d", &a,& b);
    int c = a ^ b;//a与b按位异或,c的二进制中一的个数就是a与b的二进制不同位的个数
    int i = 0;
    int count = 0;
    for (i = 0; i <32; i++)//int为四字节32位,所以循环32次,计算c中1的个数
    {
        if ((c >> i)&1==1)//通过c右移位与1(00000000000000000000000000000001)按位与,只有在移位时c的最后一个二进制位有1,count++,即可算出c中1的个数。
        count++;
    }
    printf("%d", count);
    return 0;
}
发表于 2023-07-22 15:54:22 回复(0)
4ms 412kb
#include <iostream>
using namespace std;

int main() {
    int a, b, num;
    cin >> a >> b;
    for(int i = 31; i >= 0; i--){
        if((a >> i & 1) != (b >> i & 1)){
            num++;
        }
    }  
    cout << num;
}
发表于 2023-05-11 20:48:33 回复(0)
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>

int main()
{
    int x = 0;
    int y = 0;
    int k = 0;
    scanf("%d %d", &x, &y);
    k = x ^ y;
    int i = 0;
    int count = 0;
    for (i = 0; i < 31; i++)
    {
        if (k & 1)
        {
            count++;
        }
        k = k >> 1;
    }
    printf("%d", count);
}
发表于 2023-03-15 20:34:49 回复(0)
#include <stdio.h>
int main()
{
    int a = 0;
    int b = 0;
    int c = 0;
    int i = 0;
    int count = 0;
    scanf("%d %d", &a, &b);
    c = a ^ b;
    for (i = 0; i < 32; i++)
    {
        if ((c >> i) & 1)
        {
            count++;
        }
    }
    printf("%d", count);
    return 0;
}

发表于 2023-02-09 18:46:20 回复(0)
int main()
{
	int m = 0, n = 0;
	int add = 0;
	int number = 0;
	while (scanf("%d %d", &m, &n) == 2)
	{
		add = 0;
		number = m ^ n;
		while (number)
		{
			if (number & 1)
			{
				add++;
			}
			number = number >> 1;
		}

		printf("%d\n", add);
	}
	return 0;
}

发表于 2023-02-07 23:53:49 回复(0)

C语言

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>

int main()
{
    int m = 0;
    int n = 0;
    scanf("%d %d", &m, &n);
    int count = 0;

    for (int i = 0; i < 32; i++)
    {
        if (((m>>i)&1)!=((n>>i)&1))
        {
            count++;
        }
    }
    printf("%d\n", count);
    return 0;
}
发表于 2023-02-07 23:16:31 回复(0)
#include<stdio.h>
int main()
{
	int m = 0;
	int n = 0;
	int count = 0;
	scanf("%d %d", &m, &n);
	for (int i = 0; i <= 31; i++)
	{
		if (((m>>i) & 1)^((n>>i) & 1))
			count++;
	}
	printf("%d", count);
	return 0;
}

发表于 2023-02-07 20:52:28 回复(0)
#include<iostream>

using namespace std;
int main(void)
{
    int a = 0;
    int b = 0;
    int key = 0;
     cin >> a >> b ;
    int c = a^b;
    
    for(int i = 0;i < 32;i++)
    {
    int d = c &1;
    if(d == 1) key++;
        c >>= 1;
    }
    cout << key << endl;
}
发表于 2023-01-14 18:28:26 回复(0)
#include <stdio.h>
int calc_diff_bit(int m, int n) {
    int tmp = m^n;
    int count = 0;
    while(tmp)
    {
        tmp = tmp&(tmp-1);
        count++;
    }
    return count;
} int main() {
 int m,n;
 while(scanf("%d %d", &m, &n) == 2)
 {
     printf("%d\n", calc_diff_bit(m, n));
 }
 return 0;
}

发表于 2023-01-06 14:47:39 回复(0)
#include<stdio.h>
int main()
{
    int m = 0, n = 0;
    scanf("%d%d", &m, &n);
    int i = 0;
    int count = 0;
    for (i = 0; i < 32; i++) {
        if (((m >> i) & 1) != ((n >> i) & 1)) {
            count++;
        }
    }
    printf("%d", count);
}
个人拙见
发表于 2022-11-09 16:04:55 回复(0)
int main()
{
	int a = 0;
	int b = 0;
	int c = 0;
	int i = 0;
	int count = 0;
	scanf("%d %d",&a,&b);
	for (i=0;i<32;i++)
	{
		if ((a&(1<<i))!=(b&(1<<i)))
		{
			count++;
		}
	}
	printf("%d", count);
	return 0;
}

发表于 2022-11-03 23:16:24 回复(0)