2014-09-09 3 views
2

objective-c의 32 비트 정수에서 1로 설정된 비트 수를 계산하고 싶습니다.정수의 비트 수를 계산하는 objective-c 특정 방법이 있습니까

  • 자바 Integer.bitCount있다()
  • C++에서 가끔있다 __popcount()
  • SQL은 BIT_COUNT을 (가)

동등한에 대한이 있습니까 : 일부 언어는 단일 호출로이가 목표 -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; 
} 

을 ...하지만, 일부 프로세서는이를 프로세서에 내장 된 하나의 명령으로 자연스럽게 나는 그것이 시간이기 때문에 그 활용하고 싶습니다 : 그렇지 않으면 내가 사용합니다 중요한 루프.

답변

4

GCC, 그 소리 내장 된 오브젝티브 C에서 호출 할 수있는 C입니다 __builtin_popcount 가지고 :

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

이가로 컴파일해야 SSE 4.2와 현대의 x86 플랫폼을 단일 명령 (POPCNT).

+1

아, 알겠습니다. 고마워요. 실제로 함수를 사용하지 않고 직접 사용합니다. –

+0

어떤 이유로 Xcode (Swift 2.2)는이 기능을 인식하지 못합니다. 어떤 생각이 잘못된거야? –

+0

@TimVermeulen : Swift에서만 사용할 수 있습니다. C/C++/Objective-C 외. –

관련 문제