본문으로 바로가기

쉬프트 연산자 << , >> 는 쉽게 말해서 비트를 이동시키는 역할을  하는데요
1. 먼저 << 의 경우 왼쪽으로 자리를 옮기는 역할을 합니다.

20의 이진수 : 10100
20 << 2 = 1010000 = 80 = 20 * 2의 2승 
20 << 3 = 10100000 = 320 = 20 * 2의 3승

<< 쉬프트 연산은 곱하는 역할을 하고 빠른 곱하기라고 부릅니다.
그 이유는 비트 단위로 계산을 해버리기 때문에
단순히 20*2 이런식으로 계산하는것보다 더 빠릅니다.

 2. >> 의 경우 오른쪽으로 자리를 이동하는 역할을 합니다.
20 >> 2 = 101 = 5 => 20 / 2의 2승 
20 >> 3 = 10 = 2   => 20 / 2의 3승
소수점 자리는 버리게 됩니다.

요약해 보자면 <<은 곱하기 , >>은 나누기 역할을 합니다.

예전의 폴더폰의 경우 메모리가 너무나 부족했기 때문에 메모리를 사용이 정말 중요했기 때문에
메모리를 꽉꽉채워서 사용하는 경우가 많았습니다.
어떻게 하냐구요? 아래를 천천히 보세요

int iHigh = 187; 
int iLow = 13560; 이렇게 선언하게 되면 

int는 32bit이고 187,13560은 2의 15승을 넘지 못하기 때문에 변수를 기준으로 오른쪽에 들어가있습니다.

int iNumber = iHigh;
iNumber <<= 16;
iNumber에는 187이 들어가 있고 << 16 을 하게 되면 상위 16비트에 값이 들어가게 된다.
1870000000000000000(이런 형식으로 데이터가 들어가게 됩니다)

iNumber |= iLow; 하게 되면 
하위 16bit에 iLow값을 채우게 되고 그럼 결구 iNumber에 187,13560값을 넣게 되는것입니다.

그런다음 다음 값을 출력하고 싶다면 
cout << "High : " << (iNumber >> 16) << endl; 
cout << "Low : " << (iNumber & 0x0000ffff) << endl;