首页 > 代码库 > 获得两个整形二进制表达位数不同的数量

获得两个整形二进制表达位数不同的数量

这是一道小米校招真题

题目描述

世界上有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的个数。

获得两个整形二进制表达位数不同的数量