본문 바로가기
프로그래밍 언어/c(임베디드)

비트 마스크

by [Akashic Records] 개발의선지자 2024. 5. 22.

비트 연산 : 비트를 기본 단위로 연산을 시켜주는 연산자, 피연산자는 반드시 두 개의 정수이여만 하는 이항 연산자.

실수는 비트 연산 불가능

 

비트 마스크는 임베디드 시스템에서 몇가지 장점을 가진다 .

 

 

비트 마스크는 주로  세가지 역할로  나눌수 있다.

특정 비트를 특정 값으로 만들거나  비트 값을 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