首页 > 试题广场 >

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

[编程题]两个整数二进制位不同个数
  • 热度指数:9852 时间限制: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 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 回复(0)
#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)
#include <stdio.h>
int main()
{
    int n=0;
   n= NumberOf1(n);
   printf("%d",n);
}
struct a
{
    unsigned int arr:1;
    unsigned int arr2:1;
    
}ar;
int NumberOf1(int n ) {
    // write code here
    int i,sum=0;
    int a,b;
    scanf("%d %d",&a,&b);
    for(i=0;i<32;i++)
    {
   ar.arr = a;
        ar.arr2=b;
        if (ar.arr != ar.arr2)
            sum++;
        a >>= 1;
        b >>= 1;
        

    }
    return sum;
}
发表于 2022-10-15 10:58:35 回复(0)
#include<stdio.h>
int main()
{
    int a=0;
    int b=0;
    scanf("%d %d",&a,&b);
    int count=0;
    for(int i=0;i<32;i++)
    {
        if((a&1)!=(b&1))//判断ab末位是否相同
        {
            count++;
        }
         a=a>>1;//末位比较完进行移位,比较下一位
         b=b>>1;
    }
    printf("%d",count);
}

//法二:
#include<stdio.h>
int main()
{
    int a=0;
    int b=0;
    scanf("%d %d",&a,&b);
    int count=0;
    int c=a^b;
//将ab两数异或,异或的结果为c,c的某位上是1说明ab那位是相异的,为0则是相同
//得到c之后,计算c里面0的个数即可(这里是求不同位,如果求相同位就是计算1的个数)
    while(c)
    {
        c=c&(c-1);
        count++;
    }
    printf("%d",count);
}

编辑于 2022-08-07 16:49:09 回复(0)

问题信息

上传者:小小
难度:
59条回答 14237浏览

热门推荐

通过挑战的用户