• 연산자와 피연산자란?

- 연산자 : 덧셈, 뺄셈처럼 계산할 기호

- 피연산자 : 연잔자로 인해 계산되어지는 숫자

 

  • 연산자 종류
산술 연산자 + - * / % << >> 사칙 연산과 비트연산
비교 연산자 > < >= <= == != 크고 작음과 같고 다름을 비교
논리 연산자 && || 그리고(AND)와 또는(OR)으로 조건을 연결
대입 연산자 = ++ -- 우변의 값을 좌변에 저장, 연산 복합대입
기타 연산자 (type) ?: instance of 형변환 연산자, 삼항 연산자, instance of 연산자
  • 논리 연산자
    && (AND = 피연산자 모두 참), || (OR = 피연산자 둘중 하나라도 참), ! (피연산자의 반대 boolean값)
// 논리 연산자
boolean flag1 = true;
boolean flag2 = true;
boolean flag3 = false;

System.out.println(flag1); // true
System.out.println(flag2); // true
System.out.println(flag3); // false

// 피연산자 중 하나라도 true 이면 true
System.out.println(flag1 || flag2); // true
System.out.println(flag1 || flag2 || flag3); // true
// 피연산자 모두 true 이면 true
System.out.println(flag1 && flag2); // true (flag1, flag2 모두 true 라서)
System.out.println(flag1 && flag2 && flag3); // false (flag3은 false 라서)

// And 연산
System.out.println((5 > 3) && (3 > 1)); // 5 는 3 보다 크고, 3 은 1 보다 크다 (true)
System.out.println((5 > 3) && (3 < 1)); // 5 는 3 보다 크고, 3 은 1 보다 작다 (false)

// Or 연산
System.out.println((5 > 3) || (3 > 1)); // 5 는 3 보다 크거나, 3 은 1 보다 크다 (true)
System.out.println((5 > 3) || (3 < 1)); // 5 는 3 보다 크거나, 3 은 1 보다 작다 (true)
System.out.println((5 < 3) || (3 < 1)); // 5 는 3 보다 작거나, 3 은 1 보다 작다 (false)

// System.out.println(1 < 3 < 5); // 불가능한 코드

// 논리 부정 연산자
System.out.println(!flag1); // false (flag1 값의 반대)
System.out.println(!flag3); // true (flag3 값의 반대)
System.out.println(!(5 == 5)); // false
System.out.println(!(5 == 3)); // true
  • 대입 연산자
    변수를 바로 연산해서 그 자리에서 저장하는 연산자
    기본 대입 연산자인 =,+,- 와 다른 연산을 함께쓰는 복합 대입 연산자가 있다. (+=,-= 등)
    복합 대입 연산자는 기본 대입 연산자를 심플하게 작성하게 해주는 것이지 기능은 같다.
    += 1 은 ++과 동일하다(피연산자에 1 더해주기)
    EX) num1 += num2 라고 하면 num1 = num1 + num2 가 되는 것.
    똑같이 -=1은 --와 동일하다(피연산자에서 1빼주기)

    🔥주의!
    ++ 또는 --가 피연산자 뒤에 붙이냐, 앞에 붙이냐에 따라서 연산순서가 달라진다.

연산자 연산자 위치 기능 연산 예
++ ++{피연산자} 연산 전에 피연산자에 1 더해줌. val = ++num;
num값+1 후에 val변수에 저장
++ {피연산자}++ 연산 후에 피연산자에 1 더해줌. val = num++;
num값을 val변수에 저장 후 num+1
- - - -{피연산자} 연산 전에 피연산자에 1 빼줌. val = —num;
num값-1 후에 val변수에 저장
- - {피연산자}- - 연산 후에 피연산자에 1 빼줍니다. val = num—;
num값을 val변수에 저장 후 num-1
// 대입 증감 연산자

public class Main {

	public static void main(String[] args) {
		int a = 10;
		int b = 10;
		int val = ++a + b--; // a 는 연산전에 +1, b 는 연산후에 -1

		System.out.println(a); // 11
		System.out.println(b); // 9
		System.out.println(val); // 21

		// 11 + 9 가 왜 21??
		// a 는 val 연산전에 ++ 가 수행되어서 11로 연산되었지만
		// b 는 val 연산후에 -- 가 수행되어서 기존값이 10으로 연산된 후 -- 가 수행.
		// 따라서 연산된 a값인 11과 연산되기전 b값인 10이 더해져서 21이 됨!


		int c = a--; // c 에 a 값 대입 후 a-1  (즉, a=10, c=11)
		int d = ++b; // b 값 +1 후에 d 에 대입 (즉, b=10, d=10)
		int val = c-- * ++d; // c 는 연산후에 -1, d 는 연산전에 +1

		System.out.println(a); // 10
		System.out.println(b); // 10
		System.out.println(c); // 11
		System.out.println(d); // 10
		System.out.println(val); // 11 * 11 = 121

		// 11 * 10 이 왜 121??
		// c 는 val 연산후에 -- 가 수행되어서 기존값이 11로 연산된 후 -- 가 수행되었지만
		// d 는 val 연산전에 ++ 가 수행되어서 11로 연산.
		// 따라서 연산전 a값인 11과 연산된 b값인 11이 곱해져서 121이 됨!
	}

}

쉽게 말해, 

int a = 10;
int b = 10;
int val = ++a + b--;

이 부분만 보면 나는 일단 뒤에 붙은 복합 연산자는 없다고 생각하고 본다.

그러면 val = ++a + b 이니까 a에 1을 더한 11 + 10 을 해서 val = 21이 되는 것이고 계산을 다 한 후 b에 복합연산자인 --를 붙여 b값은 9가 되는 것!

처음에는 뭔가 되게 복잡하다 생각했는데 생각보다 간단한 것이었다

 

  • 기타 연산자
    - 형변환 연산자
// 형변환 연산자
int intNumber = 93 + (int) 98.8; // 93 + 98

double doubleNumber = (double) 93 + 98.8; // 93.0 + 98.8

  - 삼항 연산자

    : 비교 연산의 결과값에 따라 응답할 값을 직접 지정할 수 있는 연산자.

      삼항 연산자는 3가지 피연산자가 존재하여 삼항 연산자라고 한다.(조건/참결과/거짓결과)

     - (조건) ? (참결과) : (거짓결과)

// 삼항 연산자
int x = 1;
int y = 9;

boolean b = (x == y) ? true : false;
System.out.println(b); // false

String s = (x != y) ? "정답" : "땡";
System.out.println(s); // 땡

int max = (x > y) ? x : y;
System.out.println(max); // 9

int min = (x < y) ? x : y;
System.out.println(min); // 1

 

⭐연산자 우선순위

산술 > 비교 > 논리 > 대입
// 연산자 우선순위
int x = 2;
int y = 9;
int z = 10;

boolean result = x < y && y < z; // <,> 비교연산자 계산 후 && 논리 연산자 계산
System.out.println(result); // true

result = x + 10 < y && y < z; // +10 산술연산자 계산 후 <,> 비교연산자 계산 후 && 논리 연산자 계산
System.out.println(result); // false

result = x + 2 * 3 > y; // 산술연산자 곱센 > 덧셈 순으로 계산 후 > 비교연산자 계산
System.out.println(result); // false (8>9)

result = (x + 2) * 3 > y; // 괄호안 덧셈 연산 후 괄호 밖 곱셈 계산 후 > 비교연산자 계산
System.out.println(result); // true (12>9)

 

'코딩 공부 > 개념정리' 카테고리의 다른 글

github 저장소 Mirror  (0) 2023.05.09
HTTP & MVC  (0) 2023.04.16
Java_개행문자?  (0) 2023.04.05
Java 변수, 아스키 코드  (0) 2023.04.03
개발 언어_Java(23.04.03)  (0) 2023.04.03

+ Recent posts