비트 연산 : 비트를 기본 단위로 연산을 시켜주는 연산자, 피연산자는 반드시 두 개의 정수이여만 하는 이항 연산자.
실수는 비트 연산 불가능
비트 마스크는 임베디드 시스템에서 몇가지 장점을 가진다 .
비트 마스크는 주로 세가지 역할로 나눌수 있다.
특정 비트를 특정 값으로 만들거나 비트 값을 2배수 연산 시 , 특정 비트 값을 얻기 위한 용도이다.
※특정 비트 제어
A라는 집합이 있다고 하자, k 번째 비트를 제어하고 싶다.
1. k번째 비트만 1으로 만들기 (BIT SET)
A |= (1 << k)
2. k번째 비트만 0으로 만들기 (BIT RESET or Clear)
A &= ~(1 << k)
3. k번째 비트 토글하기(BIT TOGGLE)
A ^= (1 << k)
※ 2배수 연산
1. 해당 수 2배수 곱하기
집합 값 A를 특정 비트 번쨰 k * 2의 n승 만들고자 한다.
(A = k << n);
2. 해당 수 2배수 나누기
집합 값 A를 특정 비트 번쨰 k / 2의 n승 만들고자 한다.
(A = k >> n);
※ 임의의 비트 값이 어떤 값인지 확인
1. 임의의 비트 값이 1인지 확인
- if(A & (1<<k))
- if(A >> k) & 1))
비트 마스크 함수
void SET_BIT(unsigned char address, unsigned char n){ //n번째 비트에서 연속된 num비트 set
printf("0x%x\n", (address) |= (0x01 << (n)));
}
void SET_BITS(unsigned char address, unsigned char num, unsigned char n){ //n번째 비트에서 연속된 num비트 set
printf("0x%x\n", (address) |= (num << (n)));
}
void CLEAR_BIT(unsigned char address, unsigned char n){ //n번째 비트에서 연속된 num비트 set
printf("0x%x\n", (address) &= ~(0x01 << (n)));
}
void CLEAR_BITS(unsigned char address, unsigned char num, unsigned char n){ //n번째 비트에서 연속된 num비트 set
printf("0x%x\n", (address) &= ~(num << (n)));
}
추가 특정 레지스터값 읽기
- (A >> k) & 0xff) //값 추출
'프로그래밍 언어 > c(임베디드)' 카테고리의 다른 글
가변인자 함수 + 디버깅 매크로 (0) | 2024.08.16 |
---|---|
구조체 & 공용체 [1] (0) | 2024.07.18 |
LSM/MSB , 리틀 엔디안 / 빅 엔디안 (0) | 2024.07.16 |
while문 사용법 (0) | 2024.07.13 |
volatile 지시자 (0) | 2024.05.08 |