计算最低位对应1的数值
比如7的二进制是多少 111
那么 他的计算方式就是
java
public int lowBit(int x){
return x&(x^(x-1));
}
public int lowBit2(int x){
return x&-x;
}
Kotlin
fun lowBit(x: Int): Int {
return x and (x xor x) - 1
}
fun lowBit2(x: Int): Int {
return x and -x
}
那么我们来试验一下我们的api
package com.example.learn1
fun main() {
repeat(10) {
println("当前是:${it} 二进制是${it.toUInt().toString(radix = 2)} 结果是 ${lowBit(it)}")
}
}
fun lowBit(x: Int): Int {
return x and (x xor (x - 1))
}
fun lowBit2(x: Int): Int {
return x and (-x)
}
非常的正确。
第二个lowBit也是同样的结果。