我有一个位数组实现,其中第0个索引是数组中第一个字节的MSB,第8个索引是第二个字节的MSB,依此类推.
查找此位数组中设置的第一位的快速方法是什么?我查找的所有相关解决方案都会找到第一个最不重要的位,但我需要第一个最重要的位.所以,给定0x00A1,我想要8(因为它是从左边开始的第9位).
我有一个位数组实现,其中第0个索引是数组中第一个字节的MSB,第8个索引是第二个字节的MSB,依此类推.
查找此位数组中设置的第一位的快速方法是什么?我查找的所有相关解决方案都会找到第一个最不重要的位,但我需要第一个最重要的位.所以,给定0x00A1,我想要8(因为它是从左边开始的第9位).
GCC有__builtin_clz
个,可以在x86/x64上翻译成bsr,在ARM上翻译成clz等,如果硬件没有实现,就会进行仿真.
visual C++2005及更高版本有_BitScanReverse
.