posted by REDFORCE 2017. 9. 15. 16:38

바이트에서 1인 비트의 갯수를 새는 방법은 여러가지가 있으나

본 글에서 적는 방법은 MSDN에서 제시하는 방법을 기술하고자 합니다.


간단히 비트 플래그 갯수를 새는 방법은 다음과 같은 코드로 수행할 수 있습니다.


WORD GetNumberOfBits( DWORD dwMask )
{
    WORD wBits = 0;
    while( dwMask )
    {
        dwMask = dwMask & ( dwMask - 1 ); 
        wBits++;
    }
    return wBits;
}

위 코드는 MSDN에 적혀있는 코드입니다.


API 형식의 자료형으로 적혀있어서 기본 C++ 형태로 바꾼 코드는 다음과 같습니다.


#include <iostream>
short GetNumberOfBits(short data)
{
short shBits = 0;
while (data)
{
data = data & (data - 1);
shBits++;
}
return shBits;
}
int main()
{
short testData = 0;
testData |= 1;
testData |= 2;
testData |= 4;
testData |= 8;
testData |= 16;
short resultCount = 0;
resultCount = GetNumberOfBits(testData);
std::cout << resultCount << std::endl;
return 0;
}
view raw main.cpp hosted with ❤ by GitHub



가볍게 MSDN 코드를 바꾸어 테스트 코드와 비트 갯수를 세는 코드만 적어두었습니다.