Chapter 1-3. 데이터 : 비트 연산

Date:     Updated:

카테고리:

태그:

인프런에 있는 Rookiss님의 강의 Part1: C# 기초 프로그래밍 입문 를 듣고 정리한 필기입니다. 😀

🚖 비트 연산

연산자 종류

비트 Shift 연산자 👉 >> 오른쪽으로 몇 칸 옮길지, << 왼쪽으로 몇 칸 옮길지

int num = 1;
num = num << 2;  // 4 가 된다.
  • << Left Shift 연산자
    • 1 << 20001 을 2 번 왼쪽으로 이동시키는 것과 같으므로 0100 이된다. 즉, 4.
    • 비워지는 곳은 0으로 채운다.
    • << N은 \(2^{N}\) 을 곱하기 하는 것과 같다.
int num = 8;
num = num >> 2;  // 2 가 된다.
  • << Right Shift 연산자
    • 8 >> 21000 을 2 번 오른쪽으로 이동시키는 것과 같으므로 0010 이된다. 즉, 2.
    • 최상위 비트 쪽인 맨 왼쪽에 비워지는 곳은
      • 양수일 경우 0으로 채운다.
      • 음수일 경우 1으로 채운다. (부호 유지)
    • << N은 \(2^{N}\) 을 곱하기 하는 것과 같다.

비트 논리 연산자 👉 같은 자리에 대응하는 비트끼리를 연산한다.

  • 이항 연산
    • & 같은 자리의 비트끼리 AND 연산
    • | 같은 자리의 비트끼리 OR 연산
    • ^ 같은 자리의 비트끼리 XOR 연산
      • 같으면 False
      • 다르면 True
  • 단항 연산
    • ~ 보수 취하기. 비트를 전부 뒤집음.
      • !는 👉 일반 논리 연산자. 0 인 값은 1로, 0 이 아닌 모든 값은 0 으로 만든다.
        • !123 은 0 이 된다.
      • ~는 👉 비트 논리 연산자.
        • ~123 은 -124 가 된다.
          • 123 : 00000000 00000000 00000000 01111011
          • ~124: 11111111 11111111 11111111 10000100


비트 연산이 쓰이는 분야

  • 유니티의 LayerMask
    • Layer 는 32 가지밖에 설정 못한다. 왜냐면 Layer 자체가 32bit 짜리 정수이기 때문이다.
    • 이 32bit에 여러 레이어들의 상황을 조합할 수 있다.
      • 8 번 레이어가 Weapon 이고 9 번 레이어가 Item 일 때, 두 레이어를 대상으로 Raycast 를 쏜다면 해당 LayerMask는 내부적으로 00000000 00000000 00000000 00011000 가 될 것이다.
        • 8 | 9 와 같음.
  • ID
    • 아이템 보유 상황을 표현할 수도 있다.
      • 위 LayerMask 처럼.
    • 계정 아이디를 32bit로 표현할 수도 있다. 👉 무려 21억여개의 아이디 표현 가능
  • 암호화
    • ^ XOR 같은 경우에는 암호화에도 많이 사옹된다.
      • XOR 을 두번 하면 원래 값으로 돌아오기 떄문
        • 123 ^ 401 ^ 401 👉 123
          • 데이터를 보낼 땐 XOR 한 값으로 보내고 (가로채려는 해킹 시도에서 이 값이 어떤 값인지 알 수 없도록)
          • 데이터를 받을 땐 다시 XOR 하여 복원.


🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우 
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄

맨 위로 이동하기

C Sharp 카테고리 내 다른 글 보러가기

댓글 남기기