世界上有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; } }