如何实现MS特定的_BitScanReverse()函数?

Rya*_*yan 5 c++ gcc bit visual-c++

来自 MSDN 从最高有效位 (MSB) 到最低有效位 (LSB) 搜索掩码数据以查找设置位 (1)。

unsigned char _BitScanReverse ( unsigned long * Index, unsigned long Mask );

参数 [out] Index 加载找到的第一个设置位 (1) 的位位置。

[in] Mask 要搜索的 32 位或 64 位值。

如果掩码为零,则返回值0;否则非零。

备注 如果找到设置位,则在第一个参数中返回找到的第一个设置位的位位置。如果没有找到设置位,则返回0;否则返回1。


请告诉我如何在OS X上实现安全快速的_BitScanReverse()函数?我必须使用汇编还是有更简单的方法?

Bo *_*son 5

GCC 有一些类似的内置函数:

\n
\n

\xe2\x80\x94 内置函数:int __builtin_clz (unsigned int x)

\n

返回 x 中前导 0 位的数量,从最高有效位位置开始。如果 x 为 0,则结​​果未定义。

\n

\xe2\x80\x94 内置函数:int __builtin_ctz (unsigned int x)

\n

返回 x 中尾随 0 位的数量,从最低有效位位置开始。如果 x 为 0,则结​​果未定义

\n
\n

如果你知道零的数量,你应该能够找出第一个 1 的位置。:-)

\n