🎲 비트 연산
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
- Layer는 32가지 밖에 설정 못한다. 왜냐면 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 하여 복원.