본문 바로가기
개발이야기

[C언어/API] 변수의 비트 수 체크하기

by 코저씨 2021. 8. 1.
728x90

C언어 함수 중 필요한 것들을 정리해서 올려보려 합니다.

이번 함수는 변수 내에 있는 비트 수를 체크하는 함수입니다.

변수 A에 0x03 값이 들어 있는 경우, 이진수로 표현 시

 

0000 0011 = 0x03

위와 같습니다. 1로 써진 비트 수는 2개이고, 비트 연산을 많이 쓰는 경우 비트 개수를 체크할 때가 많습니다.

예를 들면 여러 스위치의 값이 변수 1개에 각 비트별로 OR 처리하는 경우, 1번 스위치는 0번 비트 자리에

2번 스위치는 1번 비트 자리에 들어가도록 OR를 하면 몇 개의 스위치가 눌러졌는지 체크하는 일이 있습니다.

비록 최적화는 신경 쓴 소스는 아니지만 코딩에 많은 도움이 되었으면 합니다.

 

//해당 데이타에 비트 '1'이 2개이상이면 TRUE, 1개 이하면 FALSE
uint8_t isBitNumberOVerTwo(uint32_t uiData,uint8_t cMaxBit)
{
    uint8_t i,cCnt;
    uint32_t bitmask = 0x00000001;

    cCnt = 0;
    for(i=0;i<cMaxBit;i++,bitmask<<=1)
    {
        if(uiData & bitmask) cCnt++;

        if(cCnt >=2) return 1;
    }
    return 0;
}

 

728x90