是否有一种特定于Objective-c的方法来计算整数中的位

时间:2014-09-09 15:00:48

标签: objective-c bit-manipulation

我想在objective-c中计算我的32位整数中设置为1的位。有些语言将此作为单个调用:

  • Java有Integer.bitCount()
  • C ++有时会有__popcount()
  • SQL有BIT_COUNT()

是否有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;
}

...这很好,但有些处理器将它作为内置于处理器的单个命令,我自然希望利用它,因为它处于时间关键循环中。

1 个答案:

答案 0 :(得分:4)

gcc,clang __builtin_popcount,这是一个内置的C,可以从Objective-C调用:

-(int32_t) BitCounter:(int32_t) v
{
    return __builtin_popcount(v);
}

在具有SSE 4.2的现代x86平台上,这应该编译为单个指令(POPCNT)。