public int countBitDiff(int m, int n) {
// 方法一:两数异或,从低位到高位移位1判断1的个数
// 跟用自身判断的方法相比还是不够简洁且麻烦,大神何其多啊!
int mXORn = m ^ n;
int count = 0;
for (int i = 1; i != 0; i <<= 1) {
if ((i & mXORn) != 0) {
count++;
}
}
return count;
// 方法二:直接调用Integer.bitCount()方法
// 太惊喜了,居然API里Integer类非构造方法的第一个方法就能搞定!如下:
// static int bitCount(int i)
// 返回指定int值的二进制补码表示形式的 1 位的数量。
// return Integer.bitCount(m ^ n);
} public static int countBitDiff(int m, int n) {
int count=0;
String s1 = Integer.toBinaryString(m);
String s2 = Integer.toBinaryString(n);
char[] strChar1 = s1.toCharArray();
char[] strChar2 = s2.toCharArray();
if(strChar1.length<strChar2.length){
for(int i=0;i<strChar2.length-strChar1.length;i++){
if(strChar2[i]!='0'){
count++;
}
}
int j=0;
while(j<strChar1.length){
if(strChar1[strChar1.length-1-j]!=strChar2[strChar2.length-1-j]){
count++;
}
j++;
}
return count;
}else if(strChar1.length>strChar2.length){
for(int i=0;i<strChar1.length-strChar2.length;i++){
if(strChar1[i]!='0')
count++;
}
int j=0;
while(j<strChar2.length){
if(strChar2[strChar2.length-1-j]!=strChar1[strChar1.length-1-j]){
count++;
}
j++;
}
return count;
}else{
for(int j=strChar2.length-1;j>=0;j--){
if(strChar1[j]!=strChar2[j])
count++;
}
return count;
}
}
/**
题目描述:世界上有10种人,一种懂二进制,一种不懂。那么你知道两个int32整数m和n的二进制表达,有多少个位(bit)不同么? 解题思路:判断两个数的位数相同一般使用异或操作,对异或得到的数移位和1分别进行“与”操作 */ public class Day2017032801 { public static int countBitDiff(int m, int n) {
m = m^n;
int num = 0;
while (m>0){
if( (m&1) == 1) num++;
m = m>>1;
}
return num;
}
public static void main(String [] args){
int m=5;
int n=2;
System.out.println(countBitDiff(m,n));
} }