34. 쉬프트 연산자

A) 쉬프트 연산을 사용하면 비트 자리 이동할 수 있어. B) 왼쪽으로 쉬프트 연산을 한 번 하면 2를 곱한 결과와 같지. 오른쪽으로 쉬프트 연산을 한 번 하면 2로 나눈 결과와 같고.

<<,>>

쉬프트 연산은 좌항에 있는 피연산자를 우항에 있는 수만큼 비트 자리 이동하는 연산을 수행해요.
<< 는 왼쪽 쉬프트 연산자이고 >> 는 오른쪽 쉬프트 연산자죠.

왼쪽 쉬프트 연산을 하면 좌항에 있는 피연산자의 값이 우항에 있는 수만큼 왼쪽으로 자리 이동하고 빈 자리는 0으로 채우죠.

만약 부호없는 수 3을 왼쪽으로 4자리 이동시키면 48이예요.
이진수로 생각해 보세요.
이진수 011(10진수 3)을 왼쪽으로 4자리 이동하면 이진수 0110000(10진수 48)이 되죠.
이것을 다시 16진수로 얘기하면 16진수 3(10진수 3)을 왼쪽으로 4자리 이동하면 16진수 30(10진수 48)이예요.
참고로 16진수의 한자리는 2진수 4자리를 차지하죠.

unsigned u1 =3; u2=u1<<4; 결과는 3에 2의 4을 곱한 48이예요.

그리고 부호있는 수 -3을 왼쪽으로 4자리 이동시키면 -48이예요.

int i1=-3; i2=i1<<4; -3에 2의 4승을 곱한 -48이 결과입니다.

왼쪽 쉬프트 연산 수행 결과를 보면 왼쪽으로 한 자리 이동할 때마다 곱하기 2한 결과와 같아요.
3을 왼쪽으로 4자리를 이동하면 3에 2를 4번 곱한 결과인 48이예요.

◈ 왼쪽 쉬프트 연산 예

◈ 실행 결과

 

오른쪽 쉬프트 연산은 좌항에 오는 피연산자가 부호 없는 수와 부호 있는 수일 때 차이가 있어요.
부호 없는 수가 피 연산자로 오면 빈 자리에 0이 채워져요.
하지만 부호 있는 수가 피 연산자로 오면 부호 비트는 자리 이동하지 않고 빈 자리에 부호 비트가 채워지죠.
그렇지만 두 가지 모두 오른쪽 쉬프트 연산은 자리 이동하는 만큼 2로 나눈 결과와 같아요.

오른쪽 쉬프트 연산은 n번 쉬프트하면 2의 n승으로 나눈 결과와 같아요.

◈ 오른쪽 쉬프트 연산 예

◈ 실행 결과

 

◈ 기본 연습
1. 다음 프로그램의 출력 결과를 예측하시오.

2. 다음 프로그램의 출력 결과를 예측하고 이유를 설명하시오.
참고:
unsigned int 형식의 0x80000000은 2147483648
int 형식의 0x80000000은 -2147483648


무료 동영상

[C언어 무료 동영상 강의] 34. 쉬프트 연산자