안녕하세요. 오늘은 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만큼 증가 / 감소 비교 연산 ==, !=, <, >, <=, >=, 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에 저장된다. 산술 연산식에서 덧셈, 뺄셈 보다 곱셈, 나눗셈 연산자가 우선 처리된다. 우선순위 연산자 피연산자 연산 방향 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 대입된다.) - 단항, 이항, 삼항 연산자 순으로 우선순위를 갖는다. - 산술, 비교, 논리, 대입 연산자 순으로 우선순위를 갖는다. - 단항과 대입 연산자를 제외한 모든 연산 방향은
왼쪽에서 오른쪽이다. ( → ) - 복잡한 연산식에는 ( ) 괄호 사용해서 우선순위를 정해준다.1. 연산자 종류
2. 연산 방향과 우선순위
( =, +=, -=, *=, /=, %=, &=, ^=, |=, <<=, >>=, >>>= )* 정리