假设您有一个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操作.
谢谢您的帮助.