열혈 Java 프로그래밍

[윤성우의 열혈 Java 프로그래밍] Chapter 04

잉여진행중 2020. 7. 17. 16:32

개인적으로 헷갈리는 것 중요한 것 위주로 정리해두고 연습문제를 풀어본 글입니다.

 

연산자

 

= 대입              * 곱하기

+ 더하기           / 몫

-  빼기             % 나머지

 

- 복합 대입 연산자

a = a + b              ==      a += b

a = a - b               ==      a -= b

a = a * b               ==      a *= b

a = a / b               ==      a /= b

a = a % b              ==      a %= b

명시적 형변환 필수          형변환 안해도됨

 

* 명시적 형변환 (예시)

int num = 3;

num = (int)(num * 2.5);

 

- 논리 연산자

A && B    A, B 둘다 참 (AND)

A || B       A 또는 B둘 중 하나가 참 (OR)

!A            값이 A가 참이면 거짓, A가 거짓이면 참 (NOT)

 

- SCE (Shrot-Circuit Evaluation)

· && 의 왼쪽 피연산자가 false 이면, 오른쪽은 확인하지 않는다.

· || 의 왼쪽 피연산자가 true이면, 오른쪽은 확인하지 않는다.

오른쪽을 확인하지 않으면서 오른쪽 연산이 진행되지 않는다.

왼쪽 연산으로 완료되어 오른쪽 연산이 실행이 안됨을 확인할 수 있다.

- Prefix, Postfix

간단하게 Prefix는 전위 연산자, Postfix는 후위 연산자라고 할 수 있다.

++n; , --n;  증감 후 출력

n++; , n--;  출력 후 증감

Prefix, Postfix 예제
위의 세줄은 Prefix, 아래 두 줄은 Postfix 결과이다.

 

- 비트 연산자


<문제 04-1>

문제 1.

= 연산자는 결합방향이 오른쪽에서 왼쪽이라 가장 오른쪽 값으로 저장된다.

문제 2.

class SCEad {
	public static void main(String[] args) {
		int num1 = 0;
		int num2 = 0;
		boolean result;

		/*1
		result = ((num1+=10) < 0) && ((num2+=10) > 0);
		System.out.println("result = " + result);
		System.out.println("num1 = " + num1);
		System.out.println("num2 = " + num2 + '\n');	
		*/
		//num2의 값이 변하게 수정
		num1 += 10;
		num2 += 10;
		result = (num1 < 10) && (num2 > 0);
		System.out.println("result = " + result);
		System.out.println("num1 = " + num1);
		System.out.println("num2 = " + num2);

		/*2
		result = ((num1+=10) > 0) || ((num2 +=10) > 0);
		System.out.println("result = " + result);
		System.out.println("num1 = " + num1);
		System.out.println("num2 = " + num2);
		*/
		//수정
		num1 += 10;
		num2 += 10;
		result = (num1 > 0) || (num2 > 0);
		System.out.println("result = " + result);
		System.out.println("num1 = " + num1);
		System.out.println("num2 = " + num2);
		
	}
}

문제 3.

문제 4.

복합 대입 연산자를 이용했다.

문제 5.

class Ch4Q1_5 {
	public static void main(String[] args) {
		int n1 = ((25+5) + (36/4) - 72) * 5;
		int n2 = ((25*5) + (36-4) + 71) / 4;
		int n3 = (128/4) * 2;
		boolean result;

		result = (n1>n2) && (n2>n3);
		System.out.println(result);
	}
}