我有一个位数组实现,其中第0个索引是数组中第一个字节的MSB,第8个索引是第二个字节的MSB,依此类推.

查找此位数组中设置的第一位的快速方法是什么?我查找的所有相关解决方案都会找到第一个最不重要的位,但我需要第一个最重要的位.所以,给定0x00A1,我想要8(因为它是从左边开始的第9位).

推荐答案

GCC有__builtin_clz个,可以在x86/x64上翻译成bsr,在ARM上翻译成clz等,如果硬件没有实现,就会进行仿真.
visual C++2005及更高版本有_BitScanReverse.

C++相关问答推荐

在C、Linux中同步进程

以c格式打印时间戳

字符数组,字符指针,在一种情况下工作,但在另一种情况下不工作?

如何将不同长度的位转换成字节数组?

C语言中字符数组声明中的标准

为什么在4.9.37版的内核中,kfio还需要smp_wmb呢?

在C中将通用字符名称转换为UTF-8

为什么删除CAP_DAC_OVERRIDE后创建文件失败?

在列表中插入Int指针(C)

Kdb:仅升级指定的列

用C++从外部ELF符号读取值

将字符串数组传递给C中的函数:`str[dim1][str_size]`vs`*str[dim1]`

如何在C++中安全地进行浮点运算

MacOS下C++的无阻塞键盘阅读

将多项式从文件.txt加载到终端时出现问题

链表删除 node 错误

当我用scanf(&Q;%S%S%S&Q;,单词0,单词1,单词2)输入多个单词时,除了最后一个单词外,每个单词的第一个字符都丢失了

在Ubuntu上使用库部署C程序的最佳实践

如何正确探测平台设备?

为什么 C 字符串并不总是等同于字符数组?