본문 바로가기

JAVA/혼공자

[혼공자] Chapter 03. 연산자

03-1 연산자와 연산식

▶ 연산자 우선순위
거의 헷갈릴 일 없을거고 정 헷갈리면 괄호를 쓰면 됨

03-2 연산자의 종류

▶ 전위 & 후위 연산
전위 : 바로 +or-1
후위 : 해당 라인 다 처리하고 이후에 +or-1
이'전', 이'후'로 기억하면 편함

int x = 5, y = 5;
int a, b;
a = ++x;
b = y--;
System.out.printf("x = %d, y = %d, a = %d, b = %d", x,y,a,b);
// x = 6, y = 4, a = 6, b = 5

 

▶ 문자열 & 정수의 결합
문자열과 정수의 결합 연산은 + 를 통해서 이뤄짐
※ 주의 - 문자열을 나중에 붙이면 앞에 산수가 된 후에 문자열 결합이 일어남 ※
"JDK" + 3 + 3.0 => "JDK33.0"
3 + 3.0 + "JDK" => "6.0JDK"

▶ 부동 소수점
0.1 == 0.1f 은 false이다.
실수의 저장 방식인 '부동 소수점 방식' 때문에 0.1f는 엄밀히
0.10000000149011612 가 되므로 0.1d < 0.1f가 되기 때문이다.

- 부동 소수점 방식에서 문제가 발생하는 이유
자리수가 굉장히 크거나 무한 소수 처리에 있어 적절한 표기를 위해 근사값을 사용하므로 이런 문제가 발생한다.
ex. 컴퓨터로 0.1f는 0.10000000149011612 가 되는데 이를 비트로 표현하면 1100이 무한히 반복된다. (엄청 작은 차이임에도 비트를 많이 사용하므로 낭비) 따라서 적당히 잘라서 근사값을 사용하는 것이다.

해결 : BigDecimal
double보다 범위가 2배 이상 길어 더 정밀한 표현이 가능하다.
또한 근사값이 아닌 유효숫자와 수숫점 숫자를 기준으로 표현한다.
참고 : https://8iggy.tistory.com/232

▶ 문자열 비교 연산 (복습)
str1.equals(str2) 처럼 equals( ) 메서드를 사용한다.
리턴 타입은 당연히 boolean.

▶ && vs &
&&는 앞의 피연산자가 false면 뒤의 피연산자는 보지 않고 false 산출
&는 앞의 피연산자가 false여도 뒤의 피연산자 보고 false 산출
마찬가지로, 
||는 앞의 피연산자가 true면 뒤의 피연산자는 보지 않고 true 산출
|는 앞의 피연산자가 true여도 뒤의 피연산자 보고 true 산출

▶ 삼항연산자 실습 [ 조건 ? true이면 리턴 : false이면 리턴]
엄청 많이 마주치는 성적 문제를 이렇게 한 줄로 해결할 수도 있다

package sec02.exam11;

import java.util.Scanner;

public class ConditionalOperationExample {

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		String input;
		
		System.out.print("성적 : ");
		int score = Integer.parseInt(scanner.nextLine());
		
		String grade;
		grade = (score>=90 ? "A" : (score>=80 ? "B" : (score>=70 ? "C" : "D")));
		System.out.println("학점은 "+grade);
	}

}