1-3 데이터 : 비트 연산

omniAI·2022년 5월 2일

C#

목록 보기
4/14
post-thumbnail

🎲 비트 연산

1. 연산자 종류
비트 shift 연산자
'>>' 오른쪽으로 몇 칸 옮길지
'<<' 왼쪽으로 몇 칸 옮길지

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

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

  • 이항 연산
    • & 같은 같은 자리의 비트끼리 AND연산 (둘 다 1인 경우에만 1)
    • | 같은 자리의 비트끼리 OR연산 (둘 중 하나라도 1인 경우 1)
    • ^ 같은 자리의 비트끼리 XOR연산 (둘 다 다를때만 1)

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

👣 비트 연산이 쓰이는 분야

  • 유니티의 LayerMask
    • Layer32가지 밖에 설정 못한다. 왜냐면 Layer 자체가 32bit 짜리 정수이기 때문이다.
    • 이 32bit에 여러 레이어들의 상황을 조절할 수 있다.
      - 8번 레이어가 Weapon이고 9번 레이어가 Item일 때, 두 레이어를 대상으로 Raycast를 쏜다면 해당 LayerMask는 내부적으로 00000000 00000000 00000000 00011000가 될 것이다.
      - 8 | 9 와 같음

  • ID
    • 아이템 보유 상황을 표현할 수 있음!
      • 위 LayerMask 처럼
    • 계정 아이디를 32bit로 표현할 수도 있다. 👉 무려 21억여개의 아이디 표현 가능

  • 암호화
    • ^ (XOR) 같은 경우에는 암호화에도 많이 사용된다.
      • 123 ^ 401 ^ 401 👉 123
        • 데이터를 보낼 땐 XOR 한 값으로 보내고 (가로채려는 해킹 시도에서 이 값이 어떤 값인지 알 수 없도록)
        • 데이터를 받을 땐 다시 XOR 하여 복원.
profile
킵러닝

0개의 댓글