비전공자를 위한 자바 프로그래밍/Chapter 2. 기초 문법

2.2 여러 가지 연산자 - 2.2.5 연산자의 우선순위

codecraze111 2024. 12. 9. 19:33

수학식을 풀 때 보통은 왼쪽에서 오른쪽 방향(→)으로 계산합니다. 그리고 곱셈(*) 이나 나눗셈(/)이 있다면 이것들을 먼저 계산합니다. 또, 괄호가 있으면 그 괄호 안의 식을 제일 먼저 계산합니다. 즉, 연산의 우선순위로 보면 괄호가 제일 먼저고, 곱셈과 나눗셈이 그다음, 덧셈과 뺄셈이 마지막이 됩니다.

[그림 2-8] 수학식의 연산 순서


프로그래밍 언어에서의 연산자도 수학 연산자와 마찬가지로 연산의 우선순위가 있습니다. 수학 연산자의 우선순위와 프로그래밍 언어 연산자의 우선순위는 상당히 비슷합니다. 다만 프로그래밍 언어에는 추가된 연산자(논리 연산자 등)가 있기 때문에 이들의 우선순위를 알아두는 것이 좋습니다. 프로그래밍 언어 연산자의 우선 순위를 나타내면 다음 표와 같습니다.

[표 2-7] 연산자의 우선순위

 

[코드 2-9] 우선순위 적용의 예

 

 

NOTE! 시프트 연산자(<<, >>)

 컴퓨터는 모든 데이터를 0과 1로 표현하는 2진수를 사용합니다. 1bit는 0과 1, 두 가지 값 중 하나를 가질 수 있습니다. 예를 들어, byte a = 2; 라고 선언을 하면 0000 0010으로 메모리에 저장됩니다. 영어로 ‘shift(시프트)’는 ‘옮기다’라는 뜻입니다. 프로그래밍 언어에서의 시프트 연산자 역시 옮기는 역할을 하는데, 바로 bit 값을 옮기는 역할을 합니다. ‘<<’는 bit를 왼쪽으로 이동시키고, ‘>>’는 bit를 오른쪽으로 이동시킵니다. 앞서 나온 byte a = 2;를 이용하여 시프트 연산자의 예를 살펴보면 다음과 같습니다.

result = a << 2; // a의 bit 값을 왼쪽으로 2칸 이동해라(0000 0010 => 0000 1000)
                           // result에 대입된 값은 8이 됨
a = result >> 3; // result의 bit 값을 오른쪽으로 3칸 이동해라(0000 1000 => 0000 0001)
                           // a에 대입된 값은 1이 됨


정리하면, ‘<<’는 왼쪽으로 bit를 이동시키고, 이동시킨 bit 수만큼 2배의 값이 됩니다. ‘>>’는 오른쪽으로 bit를 이동시키고, 이동시킨 bit 수만큼 1/2배의 값이 됩니다.