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));
} }