Java位操作问题

Arp*_*sss 2 java

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

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

Ada*_*dam 5

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

幸运的是java为您提供:

Integer.bitCount(value)
Run Code Online (Sandbox Code Playgroud)

如果你想自己做:

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");
Run Code Online (Sandbox Code Playgroud)

产量

554 has 4 bits
Run Code Online (Sandbox Code Playgroud)

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

转换为字符串并查找长度

System.out.println(Integer.toString(value, 2).length());
Run Code Online (Sandbox Code Playgroud)

使用一些数学知识来获取值的基数(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))); 
Run Code Online (Sandbox Code Playgroud)