쉬프트 연산자 << , >> 는 쉽게 말해서 비트를 이동시키는 역할을 하는데요
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 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;
'프로그래밍 > C언어' 카테고리의 다른 글
c언어 절대값 구하기 abs() (0) | 2018.07.24 |
---|---|
논리 연산자 어디에 사용할까? (0) | 2018.06.23 |
비밀번호(password) 영문,특수기호,자릿수 확인 소스(코드) (0) | 2018.06.18 |
void 포인터와 형변환 (0) | 2018.06.14 |
c언어 정적 라이브러리(Library) 만들기 #3 (0) | 2018.06.11 |