I want to get the index which equals to 1 in binary format, now I use codes like this:
inline static uint8_t the_index(uint32_t val){
return uint8_t(log(val & ((~val) + 1))/log(2));
}
I want to know if there are other ways to achieve the same target? Is there any possible to use bit operation to solve this problem?
I do this to iterater a value and build some operations which depends on the position iterated, the pesudo codes like this:
while (temp) {
auto cur_index = the_index(temp);
auto window = ((1 << i) - 1) << cur_index;
if (((temp & window) ^ window) == 0) {
//....do something
}
temp &= temp - 1;
}