6일 차 - 연산자의 결합 방향, 우선순위 (23.01.02)

yvonne·2023년 1월 2일
0

📂Java

목록 보기
6/51

1. 연산자의 결합 방향과 우선순위

  • 기본적으로 연산을 할 때는 우선 순위와 결합 방향에 따라 다르게 연산이 이루어진다.
  • 기본원칙

    	1. 연산자 우선순위가 높은 것을 먼저 계산
    	(우선순위에서 가장 높은 것은 괄호)
    	2. 우선순위가 같다면 결합 방향에 따라 연산
  • 연산자의 우선순위

  • 예시

int a = 6+ 7;

(+)연산의 우선순위가 (=)연산의 우선순위보다 높다.
1. (+)연산을 먼저하고
2. a에 대입한다.


2. 대입 연산자와 산술 연산자


3. 복합 대입 연산자


4. "1초과 100미만인가?" 를 코딩 하면?


public class LogicalOp {

	public static void main(String[] args) {
		int num1 = 11;
		int num2 = 22;
		boolean result;

		// 변수 num1에 저장된 값이 1과 100 사이의 수인가?
		result = (1 < num1) && (num1 < 100);
		System.out.println("1 초과 100 미만인가? " + result);
        	}

}
  • 출력결과


5. "2의 배수 또는 3의 배수?" 를 코딩 하면?

public class LogicalOp {

	public static void main(String[] args) {
		int num1 = 11;
		int num2 = 22;
		boolean result;


		// 변수 num2에 저장된 값이 2 또는 3의 배수인가?
		result = ((num2 % 2) == 0) || ((num2 % 3) == 0);
		System.out.println("2 또는 3의 배수인가? " + result);


	}

}
  • 출력결과

6. && 와 || 설명하시오.

  • 논리 연산자



  • 논리 연산자 사용시 주의점: SCE

result = ((num1 += 10) < 0) && ((num2 += 10) > 0);
result = ((num1 += 10) > 0) || ((num2 += 10) > 0);

  • && - AND는 하나라도 false면 false이기 때문에 뒤의 연산은 적용되지 않았다!
  • || - OR은 하나라도 true면 true이기 때문에 뒤의 연산은 적용되지 않았다!

7. 아래의 프린트 결과를 예측해 보고, 코딩 후 결과를 확인 하시오.

class SCE {

public static void main(String[] args) {

int num1 = 0;

int num2 = 0;

boolean result;

 

result = ((num1 += 10) < 0) && ((num2 += 10) > 0);

System.out.println("result = " + result);

System.out.println("num1 = " + num1);

System.out.println("num2 = " + num2 + '\n'); // "

 

result = ((num1 += 10) > 0) || ((num2 += 10) > 0);

System.out.println("result = " + result);

System.out.println("num1 = " + num1);

System.out.println("num2 = " + num2);

     }
}
  • 출력결과

  • 이유
    첫 번째 연산의 num1은 10이 되고, 이미 false이기 때문의 뒤의 num2 대입 연산은 생략되었으므로 num2는 그대로 0이다.
    다음 줄의 num1은 10에서 +10 했기 때문에 20이 되고, 이미 true이기 때문에 뒤의 연산 역시 생략되었으므로 num2는 계속 0이다.


8. 아래가 에러가 나는 이유를 설명하고, 수정 하시오.

short num = 1;

num = -num;

	}
}
  • 이유: num은 short형으로 선언되었지만 -는 "부호연산자"로 연산이기 때문에 int형으로 자동형변환이 일어나 오류가 발생
  • 수정
short num = 1;

num = (short)(-num);

	}
}

9. 아래의 출력값을 예측하시오.


class AssignSteResult {

public static void main(String[] args) {

int num1 = 10, num2 = 20, num3 = 30;

num1 = num2 = num3;
  • 출력값:
  • 이유: 연산자 대입은 결합방향이 오른쪽에서 왼쪽으로 진행되기 때문에 num3인 30이 차례로 왼쪽으로 대입된다.

11. 아래의 출력값을 예측하시오.

class SCE {

	public static void main(String[] args) {

		int num1 = 0;

		int num2 = 0;

		boolean result;

		num1 += 10;

		num2 += 10;

		result = (num1 < 0) && (num2 > 0);

		System.out.println("result = " + result);

		System.out.println("num1 = " + num1);

		System.out.println("num2 = " + num2 + '\n'); // + "\n"??

		num1 += 10;

		num2 += 10;

		result = (num1 > 0) || (num2 > 0);

		System.out.println("result = " + result);

		System.out.println("num1 = " + num1);

		System.out.println("num2 = " + num2);

	}

}
  • 출력결과

11. 아래의 출력값을 예측하시오.

class AddNum {

	public static void main(String[] args) {

		int result = 3 + 6;

		System.out.println("3 + 6 = " + result);

		result += 9;

		System.out.println("3 + 6 + 9 = " + result);

		result += 12;

		System.out.println("3 + 6 + 9 + 12 = " + result);

	}

}
  • 출력결과
profile
개발 연습장

0개의 댓글