这是一道小米校招真题
题目描述
世界上有10种人,一种懂二进制,一种不懂。那么你知道两个int32整数m和n的二进制表达,有多少个位(bit)不同么?
输入例子:
1999 2299
输出例子:
7
1 class Solution { 2 public: 3 /** 4 * 获得两个整形二进制表达位数不同的数量 5 * 6 * @param m 整数m 7 * @param n 整数n 8 * @return 整型 9 */ 10 11 int countBitDiff(int m, int n) { 12 13 } 14 };
目的是补全这块。通用的方法就不再赘述,下面提供一种位运算方法简便解决此题。
解决方法:
1 int countBitDiff(int m, int n) { 2 int res=m^n; 3 int count=0; 4 while(res){ 5 count++; 6 res=res&(res-1); 7 } 8 return count; 9 10 } 11 }
解析:
m和n进行异或运算以后得到res(2个数的位相同的时候为0不同为1),所以res的位中1的个数就是answer,然后进行循环对res中的1的个数计数,通过与运算
res=res&(res-1);将res中最右边的1置0(提示:res右边起的0进行与运算一定还为0,直到res最右边的1,与res-1进行与运算的时候,res-1会发生借位,res的那个1变成0,右边的0全置1,则变成了1和0与为0,把结果赋值给res完成最右边的1置0操作),依次循环直到全为0,count便存完了原来res中1的个数。
时间: 2024-10-27 02:30:53