[C#] 비트 연산자

바른사람·2022년 3월 25일

C#

목록 보기
1/1

1. 쉬프트 연산자 <<, >>

int a = 3;		   // 		0000 0011
int b = a << 2;   // b=12,  0000 1100
int c = a >> 1;   // c=1,   0000 0001

비트 연산자는 말 그대로 비트 단위로 하는 연산이다. 쉬프트 연산자는 비트를 오른쪽(>>) 혹은 왼쪽(<<)으로 이동시키는 연산이다. 빈 자리는 0으로 채운다.
자세히보면 <<는 이동한 수만큼 2의 거듭제곱으로 곱하고 >>는 나눈다는 것을 알 수 있다.

📢 1-1. 음수의 쉬프트 연산

sbyte a = -127;  // 1000 0001
sbyte b = (sbyte)(a >> 1);  // 1100 0000, -64
sbyte c = (sbyte)(a << 1); // 0000 0010, 2

>>연산은 이동하는 변수(여기선 b)가 음수를 포함한 자료형일 경우, 최상위의 부호 비트는 이동하되, 유지한다.
<< 연산은 그대로 부호 비트의 유지 없이 이동만 한다.

비트 연산 시 unsigned 자료형으로 맞추고 시작하는 것이 좋다


2. &(AND), |(OR), ^(XOR), ~(NOT) 연산자

a = 0010 1011
b = 0110 0001

a&b = 0010 0001  // &: 모두 참(1)이면 참
a|b = 0110 1011	 // |: 둘 중 하나라도 참이면 참
a^b = 0100 1010  // ^ : 서로 다르면 참
~a  = 1101 0100  // ~ : 비트 반전

📢 2-1. XOR (EXCLUSIVE OR)

XOR 연산은 암호학에서 자주 사용된다.

int id = 123;
int key = 401;
 
int a = id ^ key; // 490
int b = a ^ key;  // 123

어떤 숫자에 같은 값을 두 번 xor하면 원래 값이 나타난다는 원리를 이용한다.

xor한 값을 전달하고 받은 쪽에서 key값을 통해 원래 값이 나타나도록 하여 안전하게 데이터 이동이 가능하다.

profile
작심만일

0개의 댓글