[Snack Java] 4. 자바의 변수(variable), 상수(constant), 리터럴(literal), 형 변환(type casting)
2022.05.31 - [JAVA] - [Snack Java] 3. 자바의 문자열 클래스: 심화(StringTokenizer, StringBuilder, StringBuffer) [Snack Java] 3. 자바의 문자열 클래스: 심화(StringTokenizer, StringBuilder, StringBuffer..
yunjuniverse.tistory.com
이번 편은 자바의 연산자(Operator)이다. 이전 글에서 할당 연산자인 등호(=)와 동위 비교 연산자인 double equals(==, 해당하는 한국어를 못찾겠다...)가 자주 등장하는 것을 확인할 수 있었다.
이렇게 연산을 위한 여러 기호를 연산자(Operator)라고 한다. 연산자는 우리에게 생소한 개념은 아니다. 우리가 평소 사칙 연산을 할 때 쓰는 (+, -, ÷, ×) 도 연산자이다. 다만 자바의 연산자의 생김새는 우리가 평소 알던 연산자와는 약간의 차이가 있으며, 산술연산자 뿐만 아니라 비교, 조건, 부정, 증감 연산자 등 다양한 연산자가 존재한다. 연산자는 그다지 어려운 내용은 아니니 한번에 표로 정리해본다.
자바의 연산자 종류
종류 | 연산자 | 기능 | 예시(int) | 결과값 |
산술연산자
(Arithmetic Operators) 수학 연산을 위한 연산자 |
+ | 두 항을 더한다. | 7 + 3 | 10 |
- | 앞에 있는 항에서 뒷 항을 뺀다 | 7 - 3 | 4 | |
* | 두 항을 곱한다 | 7 * 3 | 21 | |
/ | 앞에 있는 항에서 뒷 항을 나누어 '몫'을 구한다 | 7 / 3 | 2(int의 경우) | |
% | 앞 항에 뒷 항을 나누어 나머지를 구한다. | 7 % 3 | 1 | |
할당연산자
(Assignment Operators) 값 할당을 위한 연산자 할당자 앞에 수학 연산자나 논리 연산자를 붙여 쓸 수 있다 |
= | 앞 항에 뒷 항을 할당한다 | int i = 0; | 0 |
+= | 앞 항에 앞 항과 뒷 항을 더한 값을 할당한다 | i가 2일 때, int i += 3; |
5 | |
-= | 앞 항에 앞 항과 뒷 항을 뺀 값을 할당한다. | i가 2일 때, int i -= 3; |
-1 | |
/= | 앞 항에 앞 항과 뒷 항을 나눈 몫을 할당한다. | i가 5일 때, int i /= 3; |
1(int의 경우) | |
*= | 앞 항에 앞 항과 뒷 항을 곱한 값 할당한다. | i가 5일 때, int i *= 3; |
15 | |
%= | 앞 항에 앞 항과 뒷 항을 나눈 나머지를 할당한다. | i가 5일 때, int i %= 3; |
2 | |
증감연산자
(Increment and Decrement Operators) 하나의 수를 더하거나 뺀다. |
++a | 자기 자신이 가진 수에서 1을 더한다. 보통 반복문에서 사용한다. 1을 먼저 증가시킨 뒤 다른 연산을 실행한다 | a가 5일 때, ++a * 2 |
12 |
a++ | 자기 자신이 가진 수에서 1을 뺀다. 보통 반복문에서 사용한다. 다른 연산을 실행한 뒤 1을 증가시킨다 | a가 5일 때, a++ * 2 |
10 | |
--a | 자기 자신이 가진 수에서 1을 뺀다. 보통 반복문에서 사용한다. 1을 먼저 감소시킨 뒤 다른 연산을 실행한다 | a가 5일 때, --a * 2 |
8 | |
a-- | 자기 자신이 가진 수에서 1을 뺀다. 보통 반복문에서 사용한다. 다른 연산을 실행한 뒤 1을 감소시킨다 | a가 5일 때, a-- * 2 |
10 | |
비교연산자
(Comparison Operators) 두 항의 크기를 비교한다. 참고로 자바는 이항 비교만 가능하다 |
a > b | a가 b를 초과한다(b 값 미포함) | a=1, b= 1 | false |
a >= b | a가 b 이상이다(b값 포함) | a=1, b= 1 | true | |
a < b | b가 a를 초과한다(a값 미포함) | a=1, b= 1 | false | |
a <= b | b가 a를 이상이다(a값 미포함) | a=1, b= 1 | true | |
a == b | a와 b는 동일하다 | a=1, b= 1 | true | |
a != b | a와 b는 동일하지 않다 | a=1, b= 1 | false | |
조건연산자 (Conditional Operators) 조건식이 true일 때와 false일 때의 결과 값 비교 및 결과 도출 |
조건식 ? true : false |
조건식에 일치하면 true 선언문을 실행하고 일치하지 않으면 false 선언문을 실행 | (a>0) ? "positive" : "negative" | a가 4면 "positive" a가 -2면 "negative" |
논리연산자
(Logical Operators) 주어진 논리식을 판단하여, 참(true)과 거짓(false)을 결정하는 연산자 |
! | 논리식의 결과가 참이면 거짓을, 거짓이면 참을 반환함. (논리 NOT 연산) |
A = true; B = false; |
!A → false; !B → true; |
&& | 논리식이 모두 참이면 참을 반환함. (논리 AND 연산) | A = true; B = false; |
A&&B → false; | |
|| | 논리식 중에서 하나라도 참이면 참을 반환함. (논리 OR 연산) | A = true; B = false; |
A||B → true; | |
비트연산자
(Bitwise Operators) 비트(bit) 단위로 논리 연산을 할 때 사용하는 연산자. 비트 단위로 왼쪽이나 오른쪽으로 전체 비트를 이동하거나, 1의 보수를 만들 때도 사용 |
& | 대응되는 비트가 모두 1이면 1을 반환함. (비트 AND 연산) | 1 & 2 | 0 |
| | 대응되는 비트 중에서 하나라도 1이면 1을 반환함. (비트 OR 연산) | 1 | 2 | 3 | |
^ | 대응되는 비트가 서로 다르면 1을 반환함. (비트 XOR 연산) | 1 ^ 2 | 3 | |
~ | 비트를 1이면 0으로, 0이면 1로 반전시킴. (비트 NOT 연산, 1의 보수) | ~1 | -2 | |
<< | 명시된 수만큼 비트들을 전부 왼쪽으로 이동시킴. (left shift 연산) | 2<<1 | 4 | |
>> | 부호를 유지하면서 지정한 수만큼 비트를 전부 오른쪽으로 이동시킴. (right shift 연산) | 1>>1 | 0 | |
>>> | 지정한 수만큼 비트를 전부 오른쪽으로 이동시키며, 새로운 비트는 전부 0이 됨. | 3>>>1 | 1 |
연산자의 우선 순위
순위 | 연산자 | 내용 |
1 | (),[] | 괄호 / 대괄호 |
2 | !, ~, ++, -- | 부정/ 증감 연산자 |
3 | *, /, % | 곱셈 / 나눗셈 연산자 |
4 | <, <=, >, >= | 대소 비교 연산자 |
5 | && | AND 연산자 |
6 | || | OR 연산자 |
7 | ? : | 조건 연산자 |
8 | =, +=, -=, /=, %= | 대입/할당 연산자 |
여기 있는 모든걸 다 외울 필요는 없다. 향후에 알고리즘 문제를 풀다보면 지겹게 사용하는 기본적인 개념이라 저절로 외워질 것이다. (다만, 비트 연산자까지 써야하는 경우는 아직 만나보지 못했다....)
'JAVA' 카테고리의 다른 글
[Snack Java] 7. 자바의 콘솔 입력(Console Input) (0) | 2022.06.05 |
---|---|
[Snack Java] 6. 자바의 콘솔 출력(Console Output) (0) | 2022.06.04 |
[Snack Java] 4. 자바의 변수(variable), 상수(constant), 리터럴(literal), 형 변환(type casting) (0) | 2022.06.02 |
[Snack Java] 3. 자바의 문자열 클래스: 심화(StringTokenizer, StringBuilder, StringBuffer) (0) | 2022.05.31 |
[Snack Java] 2. 자바의 문자열 클래스(String Class) (0) | 2022.05.31 |