一尘不染

查找没有循环的32位数字的最高位集的索引

algorithm

这是一个艰难的过程(至少我很难过:P):

在不使用任何循环的情况下,找到32位数字的最高位集的索引。


阅读 223

收藏
2020-07-28

共1个答案

一尘不染

递归:

int firstset(int bits) {        
     return (bits & 0x80000000) ? 31 : firstset((bits << 1) | 1) - 1;
}
  • 假设[31,..,0]索引
  • 如果未设置任何位,则返回-1
  • | 1通过限制移位数直到1达到a 来防止堆栈溢出(32)
  • 不尾递归:)
2020-07-28