Mat*_*ins 4 bit-manipulation objective-c
我想计算 Objective-c 中 32 位整数中设置为 1 的位。有些语言将其作为单个调用:
Objective-C 有等效的吗?否则我会使用:
-(int32_t) BitCounter:(int32_t) v
{
v = v - ((v >> 1) & 0x55555555);
v = (v & 0x33333333) + ((v >> 2) & 0x33333333);
return (((v + (v >> 4)) & 0x0F0F0F0F) * 0x01010101) >> 24;
}
Run Code Online (Sandbox Code Playgroud)
...这很好,但有些处理器将其作为内置于处理器中的单个命令,自然我想利用它,因为它处于时间关键循环中。
gcc、clang等有__builtin_popcount,它是一个 C 内置函数,可以从 Objective-C 调用:
-(int32_t) BitCounter:(int32_t) v
{
return __builtin_popcount(v);
}
Run Code Online (Sandbox Code Playgroud)
在具有 SSE 4.2 的现代 x86 平台上,这应该编译为单个指令 ( POPCNT)。
| 归档时间: |
|
| 查看次数: |
809 次 |
| 最近记录: |