연산자
- 연산자란 자료의 가공을 위해 정해진 방식에 따라 계산하고 결과를 얻기 위한 행위를 의미하는 기호들의 총칭이다. 그리고 각 연산자들은 연산을 하기 위해 인식하는 자료형들이 정해져 있다.
1. 최우선 연산자
.(period) : 접근연산자, 특정 범위 내에 속해 있는 멤버를 지칭할 때 사용함
[] : 대괄호 연산자, 배열참조 연산자. 자료형이나 클래스와 함께 사용되어 해당 변수나 객체가 배열로 선언됨을 알리는 역할 (ex. String[] arr = {"AA", "BB", "CC"};
() : 특정 연산자들을 묶어서 먼저 처리할 수 있도록 만들어주는 연산자
2. 단항 연산자
! : 논리부정(NOT) 연산자, 논리 자료형의 데이터 값을 부정하는 연산자
~ : 비트부정(NOT), 비트값으로 존재하는 모든 자료들에 대해 부정의 값을 취할 수 있는 연산자. 연산자 이름에 비트가 들어가면 무조건 이진수로 바꿔서 계산한다.
단 boolean, float, double 형은 ~연산자를 사용할 수 없음
byte, short, char, int형은 '~' 연산 결과 후 int, long형에만 담을 수 있음
(ex. byte b = 120; int i = ~b;
long형은 '~' 연산 후 long형에만 담을 수 있음.
+, - : 부호 연산자
++ : 증가 연산자
-- : 감소 연산자, 증가 연산자와 합쳐서 증감 연산자, 특정 변수의 값을 하나 증가시키거나 하나 감소시키는 연산자. 전위형 증감 연산자만 우선순위 2순위.
package jun.java.exam01;
public class OperEx1 {
public static void main(String[] args) {
int x = 10;
int y = ++x;
System.out.println("x = " + x);
System.out.println("y = " + y);
}
}
<결과>
x = 11
y = 11
3. 산술 연산자
+, -, *, /, % : 산술연산자
byte, short, char, int 자료형 사이의 연산에서는 결과가 int임.
long, float, double 자료형이 연산되면 큰 자료형으로 결과가 결정된다.
package jun.java.exam02;
public class OperEx2 {
public static void main(String[] args) {
short a, b;
a = b = 10;
int c = a + b;
System.out.println("c의 값:" +c);
}
}
<결과>
c의 값:20
4. 시프트 연산자
대상 변수의 값을 2진 비트로 바꾼 후 특정 비트 수만큼 이동시켜 원하는 부분의 비트 데이터를 얻어 내는 연산자
<< : (left shift) 연산자
대상 변수 값을 2진 비트로 바꾼 후 왼쪽으로 특정 비트 수만큼 이동, 빈자리는 0값으로 채움
>> : (right shift) 연산자
대상 변수 값을 2진 비트로 바꾼 후 왼쪽으로 특정 비트 수만큼 이동
overflow 발생시 양수(0)냐 음수(1)에 따라 공백을 채우는 게 달라진다.
>>> : (unsigned right shift) 연산자
'>>'와 기본적으로 같음. 그러나 원본데이터가 음수일 경우에도 빈 비트를 0으로 채움
package jun.java.exam03;
public class OperEx3 {
public static void main(String[] args) {
int i = -10;
int j = i >>> 2;
System.out.println("i = " + i + " j = " + j);
}
}
<결과>
i = -10
j = 1073741821
5. 관계 연산자
관계 연산자의 결과는 반드시 boolean으로 나온다.
>, <, >=, <= : 비교 연산자
==, != : 항등 연산자
package jun.java.exam04;
public class OperEx4 {
public static void main(String[] ar) {
int a = 10;
int b = 20;
boolean c = a < b; // 변수 a가 변수 b보다 작다.
System.out.println("a < b: "+c);
c = a != b; // 변수 a와 변수 b는 같지 않다.
System.out.println("a != b: "+c);
}
}
<결과>
a < b: true
a != b: true
6. 비트 연산자
& : 압축의 원리
| : 압축해제의 원리
^(XOR) : 암호화
7. 논리 연산자
&&(AND), || (OR) : 앞의 것만으로도 판단 가능이면 판단함
short circuit : &&일 경우 false출력 ||일경우 true출력 고로 실행속도가 빠르다.
package jun.java.exam05;
public class OperEx5 {
public static void main(String[] ar) {
boolean a;
boolean b;
if((a = 4 > 3)|(b= 5 > 7)) {
System.out.println("a = "+a);
System.out.println("b = "+b);
// || 로 하면 ERROR 발생
// 그러나 |로 고치면 a = true, b = false 출력
}
}
}
8. 삼항 연산자
조건항 ? 항1(true일 때) : 항2(false일 때)
package jun.java.exam06;
public class OperEx6 {
public static void main(String[] args) {
int a = 20, b = 30, max;
max = a > b ? ++a : ++b;
System.out.println("max :"+max);
System.out.println("a :"+a);
System.out.println("b :"+b);
}
}
<결과>
max :31
a :20
b :31
9. 배정 연산자, 대입 연산자
*=, /=, %=, +=, -=, <<=, >>=, >>>=, ^=, &=, !=, =
같은 배정대입 연산자 중에서는 원래 연산순위에 따라 진행된다
x ++ y의 함의 : 누적
= : 대입연산자
package jun.java.exam07;
public class OperEx7 {
public static void main(String[] ar) {
int a = 10;
int res = 0;
res += a; System.out.println("res = " + res);
res *= a; System.out.println("res = " + res);
res -= a; System.out.println("res = " + res);
res %= a; System.out.println("res = " + res);
}
}
<결과>
res = 10
res = 100
res = 90
res = 0
10. 증강 연산자(후위형) : ++/--
중요한 포인트 : = 보다 순서가 늦는다는 점
11. 콤마 연산자
, : 순차 연산자
정수와 실수의 연산 : 특수한 연산
<결과>
error 발생
i, j 를 double형으로 바꿔야 한다.
package jun.java.exam08;
public class OperEx8 {
public static void main(String[] args) {
double i = 10 ; double j = 0;
System.out.println("i/j =" + (i/j));
// 만약에 i, j가 double형이라면?
}
}
<결과>
i/j =Infinity
컴파일 에러 : 논리 자체가 말이 안 될 때
런타임 에러 : 논리는 맞지만 특수한 상황 (0으로 나눌 때 등)
double i = 10의 의미 -> 10에 가까운 수 (근사값)
'IT&코딩 > Java' 카테고리의 다른 글
Java - 6일차 (배열) (0) | 2022.10.20 |
---|---|
Java - 5일차 (제어문) (0) | 2022.10.20 |
Java - 4일차 (표준입출력) (0) | 2022.10.20 |
Java - 2일차 (자료형) (0) | 2022.10.12 |
Java - 1일차 (개론) (0) | 2022.10.10 |