求一个二进制数中0的个数【求1的个数同理】
package comz;
public class TT {
public static void main(String[] args) {
test();
}
/**
* 统计二进制数中0的个数[除法操作]
*/
public static void test() {
int d = 8;
int count = 0;
while (d != 0) {
if (d % 2 == 0) {
count++;
}
d /= 2;
}
System.out.println(count);
}
/**
* 统计二进制数中0的个数[与操作]
*/
public static void test1() {
int d = 8;
int count = 0;
while (d != 0) {
if ((d & 0x01) != 1) {
count++;
}
d >>= 1;
}
System.out.println(count);
}
}
上面的两种方法分别是除法操作和位操作。推荐位操作。
下面的这种方法是编程之美上的求二进制中1 的个数的方法。时间复杂度只与1的个数有关。
package comz;
public class TT {
public static void main(String[] args) {
test();
}
/**
* 统计二进制数中1的个数的方法。时间复杂度只与1的个数有关。
*/
public static void test() {
int n = 12;
int count = 0;
while (n != 0) {
count++;
n = n & (n - 1);
}
System.out.println(count);
}
}
那么求0的个数的时候,用总位数减去1的个数就是0的个数了!