2014-11-19 2 views
0

https://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html 말한다__builtin_popcount - C#에서 이와 동일합니까?

- 내장 기능, X-1의 비트 수를 돌려 INT의 __builtin_popcount (부호의 INT (X)). 같은 잭 그래서

, 나는이 내가 한 일을 잘못했을 경우, 또는 어떤 기능 내장이 있다는 스택 오버 플로우에서이 질문을 다시 한 번 확인하고 싶었다

 long l8 = 9; 
     int iCont = Convert.ToString(l8, 2).Split('0').ToList().FindAll(x=>x=="1").Count; 

C#에서 다음 코드를 시도 똑같이하십시오.

답변

3

아니요, 아닙니다. Split('0') 뒤에 하나의 문자열로 함께 올 것이므로 (x => x == "1")과 일치하지 않으므로 이진 표현에서 인접한 1과 임의의 숫자로 실패합니다. 예를 들어, 3을 시도하십시오. stringIEnumerable<char>를 구현

때문에 직접 문자를 보면서, 당신은 당신과 비슷한 생각을 사용할 수 있습니다

Convert.ToString(l8, 2).Count(c => c == '1')

은 물론, 다른 cleverer solutions있다.

+0

감사합니다. 나는 현명한 해결책으로 이것을 만들었습니다. 그래도 완전히 테스트하십시오. – Naresh

+0

static int __builtin_popcount (long i) { i = (i >> 1) & 0x55555555); i = (i & 0x33333333) + ((i >> 2) & 0x33333333); return (int ((i + (i >> 4)) & 0x0F0F0F0F) * 0x01010101) >> 24; } – Naresh

관련 문제