본문 바로가기

IT&코딩/Java

Java - 3일차 (연산자)

728x90
반응형

연산자

- 연산자란 자료의 가공을 위해 정해진 방식에 따라 계산하고 결과를 얻기 위한 행위를 의미하는 기호들의 총칭이다. 그리고 각 연산자들은 연산을 하기 위해 인식하는 자료형들이 정해져 있다.

 

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에 가까운 수 (근사값)

728x90
반응형

'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