世界上有10种人,一种懂二进制,一种不懂。那么你知道两个int32整数m和n的二进制表达,有多少个位(bit)不同么?
return Integer.toBinaryString(m^n).replaceAll("0","").length(); import java.util.*;
import java.lang.Math;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param m int整型
* @param n int整型
* @return int整型
*/
public int countBitDiff (int m, int n) {
long num = 0;
long x = 0;
String twoM = String.format("%32s", Integer.toBinaryString(m)).replace(' ',
'0');
String twoN = String.format("%32s", Integer.toBinaryString(n)).replace(' ',
'0');
long lengthM = twoM.length();
long lengthN = twoN.length();
long lengthMin = Math.min(lengthM, lengthN);
for (int i = 0; i < lengthMin; i++) {
if (twoM.charAt(i) != twoN.charAt(i)) {
num++;
}
}
return (int)(num + Math.abs(lengthM - lengthN));
}
} import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param m int整型
* @param n int整型
* @return int整型
*/
public int countBitDiff (int m, int n) {
// write code here
// 1. 异或操作,获取 m和n 都有哪些位是不同的
int temp = m ^ n;
int res = 0;
// 2. 获取temp上有多少个1,有多少个1,就有多少个不同
while(temp>0){
// 将temp二进制,先右移1位,再左移1位,
int tt = temp;
temp = temp>>1;
// 如果temp右移前末尾为1,两次移动结果必然不一致
if(tt != temp<<1){
res++;
}
}
return res;
}
}
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param m int整型
* @param n int整型
* @return int整型
*/
public int countBitDiff (int m, int n) {
// write code here
int c = 0;//不同位的个数
int t = m ^ n;//异或:相同为0,相异为1,所以异或完之后,有几个1就有几个不同位
//求1的个数的妙招
//t = t & (t - 1)
while(t != 0) {
t = t & (t - 1);
c++;
}
return c;
}
} import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param m int整型
* @param n int整型
* @return int整型
*/
public int countBitDiff (int m, int n) {
// write code here
int c = m ^ n;
int k = 0;
while(c != 0){
if((c & 1) == 1){
k++;
}
c = c >> 1;
}
return k;
}
}