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++ 형태로 바꾼 코드는 다음과 같습니다.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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; | |
} |
가볍게 MSDN 코드를 바꾸어 테스트 코드와 비트 갯수를 세는 코드만 적어두었습니다.
'Programming > C++' 카테고리의 다른 글
프로그래머스 Level 1.피보나치 수 (0) | 2017.12.05 |
---|---|
[C++]최대공약수, 최소공배수 구하기 (0) | 2017.10.09 |
[C++]나눗셈을 피해서 연산하자 (0) | 2017.09.04 |
[C++]상점/인벤토리 만들기(콘솔) (0) | 2017.06.14 |
[C++]High/low/Seven (0) | 2017.06.14 |