자바 연산자 우선 순위 - jaba yeonsanja useon sun-wi

안녕하세요. 오늘은 Java를 공부하면서 기본적인 '연산자'에 대해서 연산자가 무엇인지, 그 종류 및 연산자 우선순위에 대해서 포스팅해보려고 합니다.

1. 연산자란?

어떠한 기능 또는 어떤 대상체에 계산과 같은 처리를 수행하는 문자 또는 기호라고 볼 수 있습니다. Java에서의 연산자는 크게 단항, 이항, 삼항, 대입 연산자로 나뉘며, 이항 연산자는 산술, 비교, 논리 연산자로 나뉠 수 있습니다.

- 연산자(operator) : 어떠한 기능을 수행하는 기호 (ex +, -, *, / 등)

- 피연산자(operand) : 연산자의 작업 대상 (ex 변수, 상수, 수식 등)

2. 연산자의 종류

- 단항 연산자 : +, -, ~, ! 

피연산자가 오직 하나만 필요한 연산자이며, !는 현재 논리값을 부정하는 의미이며, true일 경우 false로 false일 경우 true로 반환합니다. ~는 부정 연산자이며 연산을 할때 피연산자를 int형으로 변화시키고 0은 1로 1은 0으로 바꾸는 역할을 합니다. 일반적으로 +1 -> -1, -1 -> +1의 값으로 데이터의 손실이 없을 경우 변환됩니다.

증감 연산자 : ++, --

- 증가 연산자(++) : 피연산자의 값을 1 증가시킵니다.

- 감소 연산자(--) : 피연산자의 값을 1 감소시킵니다.

 전위형

j = ++i;

++i;

j = i 

값이 참조되기 전에 증가시킵니다. 

 후위형

j = i++; 

j = i

i++; 

 값이 참조된 후에 증가시킵니다.

- 이항 연산자

1) 산술 연산자 : +, -, *, /, %

기본적인 사칙연산과 나머지 연산을 하는 가장 기본이 되는 연산자입니다., +, -는 값을 원하는 만큼 더하고 빼는 역할을 하고, *, / 각각 곱셉과 나눗셈을 나타내고 %는 나머지를 반환해주는 연산자입니다.

시프트 연산자 : <<, >>, >>>

시프트 연산자는 변수나 어떤 수의 비트를 이동시키는 연산자입니다. << 는 대상을 이진수로 바꾼 후 왼쪽으로 비트들을 옮기는 작업을 수행합니다. 이 때 빈 자리는 0의 값으로 채웁니다. ~처럼 비트를 직접 다루기 때문에 모든 변수 타입을 int형으로 변환한 후에 사용됩니다. >> 또한, 대상을 이진수로 바꾼 후 오른쪽으로 비트들을 옮기는 작업을 수행합니다. 마찬가지로 빈 자리는 0의 값으로 채웁니다. 마지막으로 >>>는 기본적으로 >>와 원리는 같습니다. 그러나 원 데이터가 -(음수)일 경우에도 앞쪽 비트를 0의 값으로 채웁니다. 오로지 양수 값만 다룰 수 있습니다.

2) 비교(관계) 연산자 : >, <, >=, <=, ==, !=

연산자의 왼쪽과 오른쪽의 피연산자들의 크기 관계를 비교하여 참과 거짓을 가리는 연산자입니다. <, >, <=, >= 는 순서대로 미만, 초과, 이하, 이상을 나타내며, ==, !=의 경우에는 두 피연산자의 값이 같은지 다른지 참 또는 거짓을 판별합니다.

3) 논리 연산자 : &&, ||

논리연산자에는 &&는 두 피연산자의 값이 모두 true일 경우에 true 값을, 하나라도 false일 경우에는 false 값을 결과로 반환해줍니다. ||는 두 피연산자 중 하나라도 true일 경우 true 값을 반환합니다. 여기에 비트 연산자(& ^, |)도 포함 되는데 이진수로 변화되어 작업을 수행하는 연산자입니다.

비트 연산자 : &, ^, |

& (and연산자) : 두개의 피연산자 모두 1이어야 결과값 1을 얻습니다. 그외에는 결과값 0 을 얻습니다.

ex) 0000 0000 0000 0000 0000 0000 0000 0110 = 6 & 0000 0000 0000 0000 0000 0000 0000 0100의 결과는

0000 0000 0000 0000 0000 0000 0000 0100 = 4의 결과를 반환합니다.

    - | (or연산자) : 두개의 피연산자중 한개의 피연산자 값이 1이면 결과값은 1입니다. 그외에는 결과값 0 을 얻습니다.

ex) 000 0000 0000 0000 0000 0000 0000 0111 = 7 | 0000 0000 0000 0000 0000 0000 0000 0100 = 4의 결과는

000 0000 0000 0000 0000 0000 0000 0111 = 7의 결과를 반환합니다.

           - ^ (xor연산자) : 두개의 피연산자의 값이 서로 다를때만 결과값 1을 얻습니다. 같을때는 0을 얻습니다. 

  ex) 0000 0000 0000 0000 0000 0000 0000 0111 = 7 ^ 0000 0000 0000 0000 0000 0000 0000 0100 = 4의 결과는

0000 0000 0000 0000 0000 0000 0000 0011 = 3의 결과를 반환합니다.

~ (not연산자) : 각비트를반전 시킨값을반환합니다. 

  ex) var a = 0111 = 7일때 ~a의 결과는 1000 = -8의 결과를 반환합니다.

- 삼항 연산자 : ?, :

유일하게 세 개의 항으로 만들어져 있는 연산자입니다. 사용 방법으로는 조건항 ? 항1 : 항2 의 구조로 사용되는데 조건항이 참일 경우 항1의 값을 반환하고, 조건항이 거짓일 경우 항2의 값을 반환합니다. 

ex) int a = 10, int b = 20 일때, a>b ? a : b; 이면 조건항이 거짓이 되기 때문에 b를 반환합니다.

- 대입 연산자 : =

말 그대로 값을 변수에 대입하는 대입 연산자입니다. ex) int a = 10은 10의 값을 int형 변수 a에 대입한다는 의미입니다.

3. 연산자 우선순위

기본적으로 연산자에는 우선순위가 있으며, 괄호의 우선순위가 제일 높고, 산술 > 비교 > 논리 > 대입의 순서이며, 단항 > 이항 > 삼항의 순서입니다. 연산자의 연산 진행방향은 왼쪽에서 오른쪽으로 수행되며, 단항 연산자와 대입 연산자의 경우에는 오른쪽에서 왼쪽으로 수행됩니다.

기본 연산자 우선순위의 도표는 아래와 같습니다.

이상으로 자바에서의 기본적인 연산자 및 연산자 우선순위에 대한 포스팅을 마치도록 하겠습니다.

Java 기본 문법 - 참조 서적 [이것이 자바다 - 한빛미디어]/1. 변수, 기본 데이터 타입, 연산자

2020. 4. 22. 10:19

1. 연산자 종류

연산자 종류

연산자

피연산자 수

산출값

설명

산술 연산

+, -, *, /, %

이항

숫자

  사칙연산 및 나머지계산 한다.

부호

+, -

단항

숫자

  음수 / 양수 부호

문자열

+

이항

문자

  두 문자를 연결시킨다.

대입 연산

=, +=, -=, *=, /=, %=

&=, ^=, |=, <<=, >>=, >>>=

이항

다양

  우변의 값을 좌변의 변수에 대입

증감 연산

++, --

단항

숫자

  1만큼 증가 / 감소

비교 연산

==, !=, <, >, <=, >=,

instanceof

이항

boolean

  값의 비교

논리 연산

!, &, |, &&, ||

이항

단항

boolean

  논리적 NOT, AND, OR 연산

조건 연산

(조건식) ? A : B

삼항

다양

  조건식에 따라 참이면 A, 거짓이면 B 선택

비트

~, &, |, ^

단항

이항

숫자

boolean

  비트 NOT, AND, OR, XOR 연산

비트 쉬프트

>>, <<, >>>

이항

숫자

  비트를 좌 / 우측으로 밀어서 이동

- 연산식은 반드시 하나의 값을 산출한다.

  따라서 하나의 값이 올 수 있는 자리에는 값 대신 연산식을 사용할 수 있다.

  int result = x + y;

- 연산식은 다른 연산식의 피연산자 위치에 올 수 있다.

  boolean result = (x + y) < 5;

  x, y를 더해서 5보다 작으면 true 크거나 같으면 false 가 result에 저장된다.

2. 연산 방향과 우선순위

산술 연산식에서 덧셈, 뺄셈 보다 곱셈, 나눗셈 연산자가 우선 처리된다.

우선순위

연산자

피연산자

연산 방향

0

  ( ) 괄호 속 연산자

다양

-

1

  증감 ( ++, -- ), 부호 ( +, - ), 비트 ( ~ ), 논리 ( ! )

단항

2

  산술 ( *. / % )

이항

3

  산술 ( +, - )

이항

4

  쉬프트 ( >>, <<, >>> )

이항

5

  비교 ( <, >, <=, >=, instanceof)

이항

6

  비교 ( ==, != )

이항

7

  논리  &

이항(단항)

8

  논리  ^

이항(단항)

9

  논리  |

이항(단항)

10

  논리 &&

이항

11

  논리 ||

이항

12

  조건 ( ?  : )

삼항

13

  대입
  ( =, +=, -=, *=, /=, %=, &=, ^=, |=, <<=, >>=, >>>= )

이항

ex) x > 0 && y < 0

> , < 비교 연산이 먼저 수행된 후 && 연산이 처리되어 최종 값이 반환된다.

연산자 우선순위가 같으면, 연산 방향에 따라 달라진다.

ex) 100 * 2 / 3 % 5  

모든 연산자들이 우선순위가 같다. 연산 방향이 왼쪽에서 오른쪽이므로

*, /, % 순으로 진행된다. (결과값 1)

ex) a = b = c = 5;

모두 대입 연산자 이므로 연산 방향이 오른쪽에서 왼쪽으로 진행된다.

c = 5, b = c, a = b 순으로 진행된다. (a, b, c 모든 변수에 5 대입된다.)

* 정리

- 단항, 이항, 삼항 연산자 순으로 우선순위를 갖는다.

- 산술, 비교, 논리, 대입 연산자 순으로 우선순위를 갖는다.

- 단항과 대입 연산자를 제외한 모든 연산 방향은 왼쪽에서 오른쪽이다. ( → )

- 복잡한 연산식에는 ( ) 괄호 사용해서 우선순위를 정해준다.

Toplist

최신 우편물

태그