9. 비트 연산자

P4·2023년 6월 9일
0
post-thumbnail

비트연산자

  • 비트 단위로 연산이 진행될때 사용하는 연산자

unsigned char byte = 1; 이렇게 썼다고 치면 1byte 공간, 8bits 공간에서 0000 0001

  • 여기서 byte << 1; 이걸 쓰면? --> 0000 0010
    (2배 증가함, 십진수에서 한칸당 10이 증가하는걸 생각하면 이해가 쉬움)
unsigned char byte = 10;

byte = byte << 1;

printf("%d\n", byte); // <-- 이건 20 // byte <<= 1; 이렇게 써도 됨
  • << 2는 4배, << 3은 8배

  • >> 2는 1/2, 맨 오른쪽의 1은 밀려서 사라져버림
    따라서 2로 나눈 몫이 됨 (나머지가 날아가기 때문)


비트 곱(&), 합(|), xor(^), 반전(~)


unsigned int a = 10;  // 이진 표현: 0000 1010
unsigned int b = 6;   // 이진 표현: 0000 0110

unsigned int result = a & b;
// 결과: 0000 0010 (2), 둘다 1이어야 1
// and

unsigned int a = 10;  // 이진 표현: 0000 1010
unsigned int b = 6;   // 이진 표현: 0000 0110

unsigned int result = a | b;
// 결과: 0000 1110 (14), 둘중 하나만 1이면 1
// or

unsigned int a = 10;  // 이진 표현: 0000 1010
unsigned int b = 6;   // 이진 표현: 0000 0110

unsigned int result = a ^ b;
// 결과: 0000 1100 (12), 같으면 0 다르면 1
// xor

unsigned int a = 10;  // 이진 표현: 0000 1010

unsigned int result = ~a;
// 결과: 1111 0101 (4294967285), 각 자릿수 뒤집기
// not

전처리기 (가장 먼저 처리해주는 것)

  • #include 쓸때 나오는 #이 전처리기

#define --> 내가 지정한 구문을 숫자로 치환해줌

#define HUNGRY 1 // 이렇게 쓰면?

int test = HUNGRY; // test가 1이라는 코드가 됨 <-- 전처리기 때문에 코드 실행전에 HUNGRY가 다 1로 변하고 컴파일 됨
  • define을 사용하는 것의 이점 : 가독성 --> 게임으로 치면 냉기상태 27, 화상 30... 이렇게 있을때 프로그래머가 이 숫자를 다 외울 수 없음 --> 그런데 문자로 쓰면 알아보기 쉬움

  • 코드 몇백군데를 돌아다니면서 수정 안해도 됨 --> 그냥 전처리기에서 숫자만 바꾸면 끝 (유지보수 good)

profile
지식을 담습니다.

0개의 댓글