【Nicn的刷题日常】之两个整数二进制位不同个数

 

目录

1.题目描述 

描述

输入描述:

输出描述:

示例1

2.解题思路 

3.解题代码 

4.思路二


 

1.题目描述 

描述

输入两个整数,求两个整数二进制格式有多少个位不同

输入描述:

两个整数

输出描述:

二进制不同位的个数

示例1

输入:

22 33

复制输出:

5

2.解题思路 

思路①:利用^操作符

任何数的二进制位都是由0.1组成

比如1

00000000 00000000 00000000 00000001

2的二进制位表示:

00000000 00000000 00000000 00000010

1和2有两位不同

^:相同为0,相异为1

我们只用记录1的个数就可得出结果 

3.解题代码 

int main() {

    int a, b;

    scanf("%d %d",&a,&b);

    int c = a^b;//相同为0相异为1

    int count = 0;

    int i = 1;

    while (i<=32)

{

    if((c&1)==1)

    {



    

        count++;

        

    }

    c = c >> 1;

    i ++;



}



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

}

4.思路二

1. 先将m和n进行按位异或,此时m和n相同的二进制比特位清零,不同的二进制比特位为1
2. 统计异或完成后结果的二进制比特位中有多少个1即可
#include 
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;
}

 

你可能感兴趣的:(算法,数据结构,动态规划,leetcode,c语言)