문타쿠, 공부하다.
[C언어 코딩 도장] Unit 23. 비트 연산자 사용하기 본문
INTRO
비트
- 2진수(0, 1)를 저장하는 단위
바이트
- 8비트 = 1바이트
"비트 연산자"
연산자 | 설명 | 연산자 | 설명 |
& | 비트 AND | &= | 비트 AND 연산 후 할당 |
| | 비트 OR | |= | 비트 OR 연산 후 할당 |
^ | 비트 XOR | ^= | 비트 XOR 연산 후 할당 |
~ | 비트 NOT | ||
<< | 비트를 왼쪽으로 시프트 | <<= | 비트를 왼쪽으로 시프트한 후 할당 |
>> | 비트를 오른쪽으로 시프트 | >>= | 비트를 오른쪽으로 시프트한 후 할당 |
- 비트 단위(2진수)로 연산하는 연산자
- 비트로 옵션을 설정할 때 주로 사용하며, 저장 공간을 아낄 수 있는 장점이 있다.(플래그 방식)
XOR_두 비트가 다를 때 1 | ||
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
23.1 비트 AND, OR, XOR 연산자 사용하기
#include <stdio.h>
int main(void)
{
unsigned char num1 = 1; // 0000 0001
unsigned char num2 = 3; // 0000 0011
printf("%u\n", num1 & num2); // 0000 0001 = 1
printf("%u\n", num1 | num2); // 0000 0011 = 3
printf("%u\n", num1 ^ num2); // 0000 0010 = 2
return 0;
}
23.2 비트 NOT 연산자 사용하기
#include <stdio.h>
int main(void)
{
unsigned char num1 = 162; // 1010 0010
unsigned char num2;
num2 = ~num1; // 0101 1101 = 93
printf("%u\n", num2);
return 0;
}
"unsigned char 자료형을 사용하는 이유?"
unsigned char는 부호 없는 정수이며, 1바이트(8비트) 크기이다.
비트 연산으로 인해 부호 비트가 영향을 받지 않도록 부호 없는 자료형을 사용하였다.
23.3 시프트 연산자 사용하기
#include <stdio.h>
int main(void)
{
unsigned char num1 = 3; // 0000 0011
unsigned char num2 = 24; // 0001 1000
printf("%u\n", num1 << 3); // 0001 1000 = 24
printf("%u\n", num2 >> 2); // 0000 0110 = 6
return 0;
}
23.4 비트 연산 후 할당하기
#include <stdio.h>
int main(void)
{
unsigned char num1 = 4; // 0000 0100
unsigned char num2 = 4;
unsigned char num3 = 4;
unsigned char num4 = 4;
unsigned char num5 = 4;
num1 &= 5; // 0000 0100 = 4
num2 |= 2; // 0000 0110 = 6
num3 ^= 3; // 0000 0111 = 7
num4 <<= 2; // 0001 0000 = 16
num5 >>= 2; // 0000 0001 = 1
printf("%u\n", num1);
printf("%u\n", num2);
printf("%u\n", num3);
printf("%u\n", num4);
printf("%u\n", num5);
return 0;
}
- 비트 연산에서 연산과 할당이 한꺼번에 이루어지는 연산자는 플래그를 켜거나 끌 때 유용하게 활용된다.
'C언어 > C언어 코딩 도장' 카테고리의 다른 글
[C언어 코딩 도장] Unit 24. 비트 연산자 응용하기 (0) | 2023.08.28 |
---|---|
[C언어 코딩 도장] Unit 23. 연습문제 및 심사문제 (0) | 2023.08.28 |
[C언어 코딩 도장] Unit 22. 연습문제 및 심사문제 (0) | 2023.08.28 |
[C언어 코딩 도장] Unit 22. 불 자료형 사용하기 (0) | 2023.08.28 |
[C언어 코딩 도장] Unit 21. 연습문제 및 심사문제 (0) | 2023.08.28 |