본문으로 바로가기

책을 보다보니 익숙치 않은 비트 쉬프트 연산자에 대해 다루고있어글을 남긴다.


자바에는 총 3개의 비트 쉬프트 연산자를 가지고 있으며 이는 피연산자의 비트열을 왼쪽 혹은 오른쪽으로 이동시키는 연산자 이다.


<< : 피연산자의 비트열을 왼쪽으로 이동시키며 이동에 따른 빈공간은 0으로 채움.

>> : 피연산자의 비트열을 오른쪽으로 이동시키며, 이동에 따른 빈공간은 음수의경우엔 1, 양수의 경우엔 0으로 채움.

>>> : 피연산자의 비트열을 오른쪽으로 이동시키며, 이동에 따른 빈공간은 0으로 채움.


int num = 2 << 1


를 놓고 봤을때 2의 비트 열을 왼쪽으로 1만큼 이동하고 이에 해당하는 정수값을 변수 num에 저장하는 것이다.


즉 2의 비트열인 00000010에 1을 왼쪽으로 1만큼 이동하는 것이며 00000100이 되고 정수 4가 되게 된다.

마찬가지로 2를 넣을때는 00001000 으로 8이 3만큼 이동할때는 00010000이 되어 16이 되며,

2의 배수 곱만큼 값이 변화하게 된다.

(2x2 = 4, 2x4 = 8, 2x8 = 16....)


2진수 정수의 특성상 왼쪽으로 한칸씩 비트열을 움직이면 2의 배수곱으로 오른쪽으로 한칸씩 이동시키면 2의 배수 나눗샘이 되게 된다.


해당 내용이 중요한 이유는 곱셈 및 나눗셈 처리시에 CPU 부담을 줄일 수 있다는 것에 있다.


일반적으로 사용하는 *의 경우와 달리 비트 쉬프트 연산자를 사용할 경우 단순히 해당 비트값을 옮겨주기만 하는 것이므로

CPU에 대한 부담을 줄여 줄 수 있으므로 유용하게 사용한다면 적게나마 CPU 부하를 줄일 수 있는 좋은 방법으로 보인다.