알고리즘

[C++팁] 비트 개수 세는 함수 __popcnt / __builtin_popcount

비트마스크 문제에서 자주 사용되는 함수인 __popcnt 와 __builtin_popcount가 있는데 사용하다 보면 visual studio에서

는 잘 되다가도 백준에서는 제출 시 오류가 발생하고 반대로 하면 백준에서 컴파일이 안되는 상황이 발생합니다.

그 이유는 백준의 채점환경은 gcc환경이기 때문이고 비쥬얼 스튜디오는 msvc 이기 때문입니다. 

이를 사용할 때마다 바꿔주는 건 귀찮기 때문에 다음과 같이 코드를 작성합니다.

#if defined(_MSC_VER)
            h = __popcnt(arr[j] ^ b); 
            // __builtin_popcount(gcc에서 사용하는 것, msvc에서는 __popcnt를 사용해야함)         
#else
            h = __builtin_popcount(arr[j] ^ b);
#endif

그러면 제출 시와 컴파일 시 둘 다 문제 없이 작동합니다.

 

 

 

 

 

#c++ 비트개수세는 함수 #c++ __popcnt # c++ __builtin_popcount #__popcnt #__builtin_popcount #popcnt #builtinpopcount