我有传入的位,如0,1,11,10等。我存储在一个字符串中。然后我将字符串转换为Int。
现在,假设Int A =“011”且Int B =“00”。是否有可能在java中知道,我已经转换为Int的字符串中有多少位。感谢。
答案 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)));