자바의 정석 Chapter3

채예찬·2022년 12월 24일
0

자바의정석

목록 보기
3/5
post-thumbnail

연산자

* 조심!!
--> 사칙연산을 할때 조심해야 할 것은 컴퓨터는 같은 타입끼리만 계산할 수 있다. 그래서 예를들어 int로 계산할 때에는 버려지는 부분이 생길수도 있다.

* 참고!!
--> 비교연산자 > < >= <= == != --> 가장 기본적인 내용들이라서 따로 정리는 하지 않는다. 필요하면 수학책을 찾아보도록!! --> =(대입연산자), == (비교연산자) 의 차이만 알아두자!

1. 연산 전에 피연산자의 타입을 일치시키는 것

  • 두 피연산자의 타입을 같게 일치시킨다.(보다 큰 타입으로 일치)
  • 피연사자의 타입이 int보다 작은 타입이면 int로 변환된다.
public static void main(String args[]) { 
		int a = 1_000_000;    // 1,000,000   1백만 
		int b = 2_000_000;    // 2,000,000   2백만 

		long c = a * b;       // a * b = 2,000,000,000,000 ?
		long d = (long)a * b;
		System.out.println(c);
		System.out.println(d);
	}

--> c에서 -값이 나온것을 보면 범위를 벗어나 형변환을 실시하지 않았을 시에는 rollback 느낌으로 계속 돌아서 다른 값이 출력되는 것을 확인 할 수 있다.

2. 증감연산자

  • 증감연산자(++) --> 피연산자의 값을 1증가시킨다.
  • 감소연산자(--) --> 피연산자의 값을 1감소시킨다.

--> 전위형 후위형으로 j = ++i; j = i++; 의 식으로 쓴다. 딱히 차이는 없다. 그냥 값을 언제 저장하고 더하는가에 대한 차이만 있을 뿐이다.

3. 반올림 - Math.round()

public static void main(String args[]) { 
		double pi = 3.141592; 
		
		System.out.println(pi);
		System.out.println(pi*1000);
		System.out.println(Math.round(pi*1000));	
		System.out.println(Math.round(pi*1000)/1000);	
		System.out.println(Math.round(pi*1000)/1000.0);	
		System.out.println((int)(pi*1000));
		System.out.println((int)(pi*1000)/1000);
		System.out.println((int)(pi*1000)/1000.0);
}

--> 예를 들어 1000을 곱해서 반올림하고 싶은 부분까지 이동 한 후에 나머지 값을 잘라내는 느낌으로 보면된다.

3. 나머지 연산자(%)

  • 오른쪽 피연산자로 나누고 남은 나머지를 반환 --> 나누는 피연산자는 0이 아닌 정수만 허용(부호는 무시됨)

-->따로 크게 정리할 부분은 없는 것 같다. 초등학교때 배운 나누기를 못하는 사람은 없기 떄문이다.

4. 문자열 비교

  • String str1 = "abc";
    String str2 = "abc";
    System.out.println(str1==str2); // true
    System.out.println(str1.equals(str2)); // true

  • String str1 = new String("abc");
    String str2 = new String("abc");
    System.out.println(str1==str2); // false
    System.out.println(str1.equals(str2)); / true

--> 두개의 차이점은 6장, 9장에서 자세하게 배운다. 일단은 1번으로 쓰도록 하자

5. 논리 연산자 ( && , || )

  • x는 10보다 크고 20보다 작다

1. x > 10 && x < 20
2. 10 < x && x < 20 (2번째 경우가 가독성이 조금 더 좋아진다. 하지만 1번도 틀린 문법은 아니다)

  • i는 2의 배수 또는 3의 배수이다.

--> i%2==0 || i%3==0

  • i는 2의 배수 또는 3의 배수지만 6의 배수는 아니다.

--> ( i%2==0 || i%3==0 ) && i%6!=0 --> and 와 or이 섞여있는 경우에는 가로를 쳐서 명확하게 해주는 것이 좋다.

  • 문자 ch는 숫자('0'~'9')이다.

-->'0' <= ch && ch <= '9'

  • 문자 ch는 대문자 또는 소문자이다.

--> ('a' <= ch && ch <= 'z') || ('A' <= h && <= 'Z') --> 유니코드에서 문자들이 연속적으로 나열되어 있기 때문에 사용가능한 표현이다.

6. 논리 부정 연산자

  • 대입연산자와 단항연산자는 오른쪽에서 왼쪽 ( <-- ) 방향으로 진행된다.

--> ch < 'a' || ch > 'z' <--> !('a' <= ch && ch <= 'z')
소문자가 아닌 경우를 표현하고 싶었는데 이럴 경우 true를 false로 바꾸는 방향으로 하는 것이 훨씬 가독성이 좋다.

7. 조건 연산자

result = (x > y) ? x : y;

if (x > y)
	result = x; // x > y가 true일 때
else
	result = y; // x > y사 false일 때

--> 실제 실무에서 많이 쓰기 떄문에 다양한 변형에 대해서도 익숙해 질 필요가 있다.

*추신!!
-->마지막으로 대입연산자는 따로 정리 하지 않았다. 그냥 빈공간에 값을 대입한다는 느낌이기 때문이다.

-Chapter3 Review

chapter3에서 가장 주의해야 할 것은 값을 비교할 떄 양쪽에 값들의 type이 일치해야 한다는 것이였다. 컴퓨터는 단순하다. 그러므로 하나하나 지시를 해줘야지 된다. 또한 조건연산자나 논리 연산자의 경우 코드상에서 적용해야 될 때가 많다. 다양한 경우들을 실습해봐야겠다.

profile
쿰척쿰척 개발기록

0개의 댓글