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
'개발이야기' 카테고리의 다른 글
[펌웨어] 키패드 다중 키 처리에 대한 이야기 (0) | 2021.09.01 |
---|---|
AnySign for PC #발견하면 반드시 지워야 합니다. (0) | 2021.08.31 |
[C언어/API] 버튼 입력 채터링 관련한 팁 (0) | 2021.08.01 |
WinCE 프로그램 종료와 Exception 'User Stack Overflow' 오류 (0) | 2021.07.22 |
1분코딩강좌 #09 enum과 switch문 (0) | 2021.05.23 |