Java位操作问题

时间:2012-03-12 23:40:09

标签: java

我有传入的位,如0,1,11,10等。我存储在一个字符串中。然后我将字符串转换为Int。

现在,假设Int A =“011”且Int B =“00”。是否有可能在java中知道,我已经转换为Int的字符串中有多少位。感谢。

1 个答案:

答案 0 :(得分:5)

是的,只需使用掩码依次测试每个位。对于整数,有32个可能的位。

幸运的是,java为您提供了这个:

Integer.bitCount(value)

如果您想自己动手:

int value = Integer.parseInt("1000101010", 2);

int bitCounter = 0;
for (int i = 0; i < Integer.SIZE; i++) {
    if (((1 << i) & value) > 0) {
        bitCounter++;
    }
}
System.out.println(value + " has " + bitCounter + " bits");

输出

554 has 4 bits

如果您想要“长度”,即0或1的数量......

转换为字符串并查找长度

System.out.println(Integer.toString(value, 2).length());

使用一些数学知识来获取值的基数(2)。

double valueUnsigned;
if (value < 0) {
    valueUnsigned = (value & 0x7FFFFFF) + 0x80000000l;
} else {
    valueUnsigned = value;
}
System.out.println("Maths solution " + Math.floor(1d + Math.log(valueUnsigned) / Math.log(2)));