小编fis*_*ion的帖子

高阶位 - 取出它们并将uint64_t转换为uint8_t

假设您有一个uint64_t,并且只关心uint64_t中每个字节的高位.像这样:

uint32_t:0000 ... 1000 0000 1000 0000 1000 0000 1000 0000 ---> 0000 1111

有没有比以下更快的方式:

   return
   (
     ((x >> 56) & 128)+
     ((x >> 49) &  64)+
     ((x >> 42) &  32)+
     ((x >> 35) &  16)+
     ((x >> 28) &   8)+
     ((x >> 21) &   4)+
     ((x >> 14) &   2)+
     ((x >>  7) &   1)
   )
Run Code Online (Sandbox Code Playgroud)

Aka移位x,屏蔽并为每个字节添加正确的位?这将编译到很多程序集,我正在寻找一个更快的方法...我使用的机器只有SSE2指令,我找不到有用的SIMD操作.

谢谢您的帮助.

c c++ assembly bit-manipulation

9
推荐指数
3
解决办法
1232
查看次数

标签 统计

assembly ×1

bit-manipulation ×1

c ×1

c++ ×1