相当于De Bruijn LSB,但对于MSB

时间:2011-03-16 13:42:47

标签: bit-manipulation

有没有人知道类似于De Bruijn的LSB的算法,但是对于MSB?或者更确切地说是确定MSB的最有效方法?

我知道Log_2(Val)会这样做,但我不知道它是否是最有效的方法。

我需要它的原因是我需要将little-endian转换为big-endian。我知道这个的标准算法。但是,输入为64位,但通常数字为16位或24位,因此在99.9%的时间内不需要交换整个8字节。

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

如果您想要一种快速方法并且能够/愿意使用硬件特定指令,您应该查看x86 BSR (位扫描反转)或类似指令。

  

在源操作数(第二个操作数)中搜索最高有效位设置位(1位)。如果最重要的1位是   发现,它的位索引存储在目标操作数(第一个操作数)中。

xor edx, edx
mov eax, 0x12345678
bsr edx, eax

它应该在edx中存储28(第28位是MSB)。如果没有找到MSB,edx将保持不变。