Chapter 1-3. 데이터 : 비트 연산
카테고리: C Sharp
태그: C Sharp Programming
인프런에 있는 Rookiss님의 강의 Part1: C# 기초 프로그래밍 입문 를 듣고 정리한 필기입니다. 😀
🚖 비트 연산
- 더 자세한 내용 C++ 비트 플래그 ,비트 마스크
연산자 종류
비트 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 연산|
같은 자리의 비트끼리 OR 연산^
같은 자리의 비트끼리 XOR 연산- 같으면 False
- 다르면 True
- 단항 연산
~
보수 취하기. 비트를 전부 뒤집음.!
는 👉 일반 논리 연산자. 0 인 값은 1로, 0 이 아닌 모든 값은 0 으로 만든다.- !123 은 0 이 된다.
~
는 👉 비트 논리 연산자.- ~123 은 -124 가 된다.
123
: 00000000 00000000 00000000 01111011~124
: 11111111 11111111 11111111 10000100
- ~123 은 -124 가 된다.
비트 연산이 쓰이는 분야
- 유니티의 LayerMask
- Layer 는 32 가지밖에 설정 못한다. 왜냐면 Layer 자체가 32bit 짜리 정수이기 때문이다.
- 이 32bit에 여러 레이어들의 상황을 조합할 수 있다.
- 8 번 레이어가 Weapon 이고 9 번 레이어가 Item 일 때, 두 레이어를 대상으로 Raycast 를 쏜다면 해당 LayerMask는 내부적으로 00000000 00000000 00000000 00011000 가 될 것이다.
8 | 9
와 같음.
- 8 번 레이어가 Weapon 이고 9 번 레이어가 Item 일 때, 두 레이어를 대상으로 Raycast 를 쏜다면 해당 LayerMask는 내부적으로 00000000 00000000 00000000 00011000 가 될 것이다.
- ID
- 아이템 보유 상황을 표현할 수도 있다.
- 위 LayerMask 처럼.
- 계정 아이디를 32bit로 표현할 수도 있다. 👉 무려 21억여개의 아이디 표현 가능
- 아이템 보유 상황을 표현할 수도 있다.
- 암호화
^
XOR 같은 경우에는 암호화에도 많이 사옹된다.- XOR 을 두번 하면 원래 값으로 돌아오기 떄문
- 123 ^ 401 ^ 401 👉 123
- 데이터를 보낼 땐 XOR 한 값으로 보내고 (가로채려는 해킹 시도에서 이 값이 어떤 값인지 알 수 없도록)
- 데이터를 받을 땐 다시 XOR 하여 복원.
- 123 ^ 401 ^ 401 👉 123
- XOR 을 두번 하면 원래 값으로 돌아오기 떄문
🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄
댓글 남기기