쉬프트 연산자는 이름에서 볼 수 있듯이 bit를 오른쪽 또는 왼쪽으로 shift하는 연산자이다. 한가지 주의할 점은 비트를 이동할 때에는 한쪽으로 밀려난 비트가 반대편에서 다시 들어오는 것이 아니라 연산자의 종류에 따라 새로운 비트로 채운다. 쉬프트 연산자에는 3가지가 있다.




<<n Left shift 비트를 왼쪽으로 n만큼 이동하고 빈 공간을 0으로 채운다.

예시 : int a=17; a=a<<2; → a=68

00000000 00000000 00010001

00000000 00000000 01000100




>>n Arithmetic right shift 비트를 오른쪽으로 n만큼 이동하고 빈공간을 부호에 맞게 채운다.

예시 : int b=-325; b=b>>4; → b=-21

11111111 11111111 11111110 10111011

11111111 11111111 11111111 11101011

음수일때는 빈 공간을 1로 채운다.


예시 : int c=1048576; c=c>>5; → c=32768

00000000 00010000 00000000 00000000

00000000 00000000 10000000 00000000

양수일때는 빈 공간을 0으로 채운다.




>>>n Logical right shift 비트를 오른쪽으로 n만큼 이동하고 빈공간을 부호에 상관없이 0으로 채운다.

예시 : int d=-15000; d=d>>>6; → d=67108629

11111111 11111111 11000101 01101000

00000011 11111111 11111111 00010101





쉬프트 연산자는 산술연산자에 비해 속도가 엄청 빠르다. 하지만 프로그래밍을 할 때에는 나 혼자 개발하는 프로그램이 아니라면 속도 뿐만 아니라 코드의 가독성도 중요하다. 특수한 목적의 프로그래밍을 제외하고는 산술연산자를 굳이 속도 때문에 쉬프트연산자로 바꿀 필요는 없다. 쉬프트연산자는 10진 연산보다는 2진 연산에 주로 사용한다.

+ Recent posts