본문 바로가기
C#/C# 공부

C# : 비트연산자1 - 시프트 연산자

by TODAYCODE 2021. 7. 11.
반응형

비트 연산자는 언제 사용하는가??

 

컴퓨터는 원래 0과 1의 비트 데이터만 다루는 기계다.

그러나 다루는 데이터 형식은 1바이트 크기가 가장 작은 형태다.

 

바이트 단위가 데이터를 다루기에 용이한 크기이긴 하지만, 비트 수준으로 데이터를 쪼개야하는 경우가 발생할 수 있다.

이럴때 비트연산자를 사용한다.


비트 연산자에 대해 자세한 설명을 하기 전에,

그 종류를 먼저 살펴보도록 하겠다.

C# 에서 제공하는 비트 연산자 종류는 다음과 같다.

연산자 이름 설명 지원 형식
<< 왼쪽 시프트 연산자 첫 번째 피연산자의 비트를 두 번째 피연산자의 수만큼 왼쪽으로 이동 첫 번째 피연산자는 int, uint, long, ulong이며
두 번째 피연산자는 int 형식만 지원
>> 오른쪽 시프트 연산자 첫 번째 피연산자의 비트를 두 번째 피연산자의 수만큼 오른쪽으로 이동 <<와 동일
& 논리곱(AND) 연산자 두 피연산자의 비트 논리곱을 수행 정수 계열 형식과 bool 형식에 사용
| 논리합(OR) 연산자 두 피연산자의 비트 논리합을 수행 &와 동일
^ 베타적 논리합(XOR) 연산자 두 피연산자의 비트 배타적 논리합을 수행 &와 동일
~ 보수(NOT) 연산자 피연산자의 비트를 0은 1로, 1은 0으로 반전, 단항 연산자 int, uint, long, ulong에 사용

 

시프트 연산자

 

시프트 연산자는 비트를 왼쪽이나 오른쪽으로 이동시킨다.

 

시프트 연산은 4바이트인 int부터 지원하지만,

간결한 설명을 위해서 잠시 무시하도록 하겠다.

예를 들어,

 

2진수로 다음과 같은 데이터가 있다고 가정하자.

00001100

 

해당 값을 전체적으로 왼쪽으로 2비트 이동시키면 다음과 같이 된다.

00/ 001100 _ _

오른쪽으로는 비어있는 2칸이 생기고

왼쪽에는 밀려나간 숫자 0이 2개 발생한다.

이때, 밀려나간 숫자들은 버려버리고 빈 곳에는 0을 채워넣는다.

이것이 시프트 연산이다.

오른쪽 시프트 연산도 마찬가지로,

오른쪽으로 전체적으로 밀어버린뒤에

밀려나온 데이터들은 버리고 빈곳에는 0을 채워넣는다.

 

다만, 음수를 오른쪽 시프트 연산을 수행한다면,

비어있는 곳에 0 대신 1을 채워넣는 방식을 수행한다.

 

int a = 20;
int result_1 = a << 2;
int result_2 = a >> 2;

// 시프트 연산자 사용 방법
// 원본데이터 << 옮길비트숫자
// 위의 예제에서는 a << 2 이런 형식으로 사용했다.

원본 데이터를 a, 옮긴 비트 숫자를 b라고 가정한다면

왼쪽 시프트 연산 결과는 a x 2^b

오른쪽 시프트 연산 결과는 a / 2^b 가 나온다.

반응형

'C# > C# 공부' 카테고리의 다른 글

C# : 프로퍼티 - Get / Set 문법  (0) 2021.07.27
C# : null 조건부 연산자  (0) 2021.07.10
C# : Nullable 형식  (0) 2021.07.10
C#: 열거 형식 (enum)  (0) 2021.07.10
C# : 상수( const )  (0) 2021.07.09

댓글