티스토리 뷰
안녕하세요. 오늘은 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. 연산자 우선순위
기본적으로 연산자에는 우선순위가 있으며, 괄호의 우선순위가 제일 높고, 산술 > 비교 > 논리 > 대입의 순서이며, 단항 > 이항 > 삼항의 순서입니다. 연산자의 연산 진행방향은 왼쪽에서 오른쪽으로 수행되며, 단항 연산자와 대입 연산자의 경우에는 오른쪽에서 왼쪽으로 수행됩니다.
기본 연산자 우선순위의 도표는 아래와 같습니다.
이상으로 자바에서의 기본적인 연산자 및 연산자 우선순위에 대한 포스팅을 마치도록 하겠습니다.
- Total
- Today
- Yesterday