JAVA 6일차

이희복·2023년 1월 2일
0

JAVA

목록 보기
39/41

연산자

결합방향

1초과 100미만인가?

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

"2의 배수 또는 3의 배수?

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

&& 와 || 설명하시오.

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

public 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);

		
	}

}

결과값

result = false
num1 = 10
num2 = 0

result = true
num1 = 20
num2 = 0

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

short num1;

short num = -num;

num은 원래 short이지만 -도 "부호연산자"로 하나의 연산이고 그래서 int형으로 자동형변환이 일어난다.

즉 -1 *num 의 연산이 일어난다고 볼 수 있으며, int(4byte)형으로 변환된 num을 short(2byte)형 num으로 대입하려 했기 때문에 (더 작은 타입으로는 자동형변환이 불가능하다.)에러가 난다.

수정

short num = 100;

num = (short)(-num);

그래서 강제 형변환을 해줘야한다.

double e1 = 3.5;

double e2 = -e1; // e1에 저장되는 값은 -3.5

부호 연산자 –는 변수에 저장된 값의 부호를 바꾸어 반환한다.

+, - 가 붙는 것도 연산임을 기억하자. (정수는 2의 보수법으로, 실수는 복잡한 방법으로 연산되어 나오는 것임)

short num1 = 5;

System.out.println(+num1); //+5(+는 불필요한 부호)//형변환 필요없이 short로 받음

System.out.println(-num1); //부호를 바꿔 얻은 결과 출력

short num2 =7;

short num3 = (short)(+num2); // 1*num2 라서 연산시 int로 변환됨//형변환 안하면 오류

short num4 = (short)(-num2); //-1*num2 라서 연산시 int로 변환됨//형변환 안하면 오류

System.out.println(num3);

System.out.println(num4);

연산의 결과가 변수에 반영이 된 것인지 아닌지 주의해서 보자!

int num =1;

boolean result;

System.out.println(-num); //-1 * num

System.out.println(num); //연산 결과를 저장한것이 아니기때문에 1이 나온다.

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

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

num1 = num2 = num3;

30이 나온다 "=" 연산자는 결합 방향이 오른쪽에서 왼쪽으로 진행된다

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

public 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);
}

}

결과값

result = false
num1 = 10
num2 = 10

result = true
num1 = 20
num2 = 20

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

public class SCE {

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);
}

}

결과값

3 + 6 = 9
3 + 6 + 9 = 18
3 + 6 + 9 + 12 = 30

0개의 댓글