Notice
Recent Posts
Recent Comments
Link
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

문타쿠, 공부하다.

[C언어 코딩 도장] Unit 24. 비트 연산자 응용하기 본문

C언어/C언어 코딩 도장

[C언어 코딩 도장] Unit 24. 비트 연산자 응용하기

개발새발 문타쿠 2023. 8. 28. 23:09

24.1 시프트 연산과 2의 거듭제곱 알아보기

#include <stdio.h>

int main(void)
{
	unsigned char num1 = 1;

	printf("%u\n", num1 << 1);
	printf("%u\n", num1 << 2);
	printf("%u\n", num1 << 3);
	printf("%u\n", num1 << 4);
	printf("%u\n", num1 << 5);
	printf("%u\n", num1 << 6);
	printf("%u\n", num1 << 7);

	return 0;
}

24.2 시프트 연산으로 자릿수를 넘어서는 경우 알아보기

#include <stdio.h>

int main(void)
{
	unsigned char num1 = 240;	// 1111 0000
	unsigned char num2 = 15;	// 0000	1111

	unsigned char num3, num4;

	num3 = num1 << 2;	// 1100 0000 = 192
	num4 = num2 >> 2;	// 0000 0011 = 3

	printf("%u\n", num3);
	printf("%u\n", num4);

	return 0;
}

24.3 부호 있는 자료형의 비트 연산 알아보기

">>"

#include <stdio.h>

int main(void)
{
	unsigned char num1 = 131;	// 1000 0011
	char num2 = -125;		// 1000 0011
	char num3 = 67;			// 0100 0011

	unsigned char num4;
	char num5;
	char num6;

	num4 = num1 >> 5;	// 0000 0100 = 4
	num5 = num2 >> 5;	// 1111 1100 = -4
	num6 = num3 >> 5;	// 0000 0010 = 2

	printf("%u\n", num4);
	printf("%d\n", num5);
	printf("%d\n", num6);

	return 0;
}
  • 부호 없는 자료형은 비트를 오른쪽으로 이동하면 모자라는 공간은 모두 0으로 채워진다.
  • 부호 있는 자료형의 첫 번째 비트는 '부호 비트'라고 하는데 이 비트가 1이면 음수, 0이면 양수이다.
  • 부호 있는 자료형을 오른쪽으로 n번 이동시키면 모자라는 공간은 모두 부호 비트의 값(부호 비트가 1이면 1로, 0이면 0)으로 채워진다.

"<<"

#include <stdio.h>

int main(void)
{
	char num1 = 113;	// 0111 0001
	char num2 = -15;	// 1111 0001
	char num3, num4, num5, num6;

	num3 = num1 << 2;	// 1100 0100
	num4 = num2 << 2;	// 1100 0100

	num5 = num1 << 4;	// 0001 0000
	num6 = num2 << 4;	// 0001 0000

	printf("%d\n", num3);
	printf("%d\n", num4);

	printf("%d\n", num5);
	printf("%d\n", num6);

	return 0;
}
  • 부호 있는 자료형에서 비트를 왼쪽으로 이동시켰을 때는 부호 비트에 있는 숫자에 따라 양수, 음수가 결정된다.
  • 따라서, 부호 있는 자료형에 시프트 연산을 할 때는 의도치 않은 결과가 나올 수 있으므로 항상 부호 비트를 생각해야 한다.

24.4 비트 연산자로 플래그 처리하기

비트가 1이면 ON, 0이면 OFF

 

가볍게 읽고 넘어가기..!