目录
十进制数字n,求对应的二进制,或者求对应的二进制的1的个数
内置方法:
Integer提供了一些内置方法来做进制转换
// Integer 内置方法把十进制转换为其他进制
String b = Integer.toBinaryString(10);
String o = Integer.toOctalString(10);
String h = Integer.toHexString(10);
// Integer 内置方法把二进制序列转化为其他进制
Integer o1 = Integer.valueOf("1011", 8);
Integer i1 = Integer.valueOf("1011", 10);
Integer h1 = Integer.valueOf("1011", 16);
传统方法:
判断n%2的结果,记录是否为1;更新n=n/2;直至n==1
// 统计十进制数字中1的个数
public static int count1(int n){
int count = 0;
while(n!=1){
if(n%2!=0){
count++;
}
}
return count;
}
与运算方法:
传统方法时间复杂度非常高,效率非常低,且对于数字非常大的情况可能会溢出而失效
考虑:n与2^i做与运算(同时为true才是true),这样结果为1说明i位置一定是1,
这样很容易计算出十进制对应的二进制,也很高效的统计出二进制数字中1的个数
// 统计十进制数字对应的二进制数字中1的个数
public static int count2(int n){
int count = 0;
for(int i=0;i<32;i++){ // 最大32位数字嘛
if((n&(1>>i))!=0){ // n与2^i与运算的结果不为0,则该位置一定是1
count++;
}
}
return count;
}