【经典问题】两整数对应二进制数不同的位数


1、题目

分享一道CVTE(广州视源电子科技股份有限公司)的面试笔试题:

世界上有两种人,一种懂二进制,一种不懂。那么你知道两个 int32 整数 m 和 n 的二进制表达,有多少个位(bit)不同么? 输入示例:1999 2299 输出示例:7

2、代码

#include <stdio.h>

int countBitDiff(int m, int n);

int main(void)
{
	int m, n, count;

	printf("请输入两个数:");
	scanf("%d %d", &m, &n);
	count = countBitDiff(m, n);
	printf("%d与%d共有%dbit不同\n", m, n, count);

	return 0;
}

int countBitDiff(int m, int n) 
{
	int temp = m^n;    //异或运算后为1的位即为m,n不相同的位
	int count = 0;
	int len = sizeof(int)*8;

	while ( len-- )
	{
		/* 从低位至高为寻找temp的位中1的个数 */
		if ( temp & 0x01 )  
		{
		 count++;
		}
		temp >>= 1;  //temp右移一位
	}

	return count;
}

题目要比较两个int32的整数的不同的bit有多少,首先想到C语言的按位异或运算:参与运算的两个值,如果两个相应位相同,则结果为0,否则为1。即: 0^0=0,1^0=1,0^1=1,1^1=0。以上程序中,首先使用一个变量temp存储两个int32的整数m,n异或后的结果,再用temp的低位至高位和0x01做按位与运算,且前提条件是长度len为真。

3、运行结果



文章作者: 杂烩君
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 杂烩君 !
  目录