[JAVA]

8. 연산자_2

혜리노베이션 2023. 5. 10. 20:17

// 연산자_2

/*
1. 형변환 연산자 = (타입)피연산자
- 변수 또는 상수의 타입을 다른 타입으로 변환하는 것
  (int)d; d값을 int로 바꾼다.
  (int)'A'; 'A'를 정수로 바꾼다 ==> 65 (유니코드 참고)
  (int)1.6f 실수1.6f를 정수로 ==> 1 (반올림 되지 않음)
  (float)10 정수10을 실수로 ==> 10.0f

2. 자동 형변환: 작은 값을 큰 그릇에 담을 때 컴파일러가 자동으로 형변환을 해주는 것
"기존의 값을 최대한 보존할 수 있는 타입으로 자동 형변환된다."
- float f = 1234; 자동으로 형변환 가능
- int i = 3.14f; float범위가 더 크기 때문에 에러 발생
- int i = (int)3.14f ==> 정수 3 출력
* 큰 값을 작은 그릇에 담을 때는 값손실이 발생할 수 있다.

예외) byte b = 100; // byte타입은 1byte이고 int타입은 4byte인데 자동형변환이 가능
     byte의 범위는 -128~127이기 때문에 100은 자동형변환이 가능

3. 사칙 연산자
- 같은 타입끼리 계산할 수 있다. (int 10 / int 4 = int 2 ==> 소수점 버림)
- int 10f / 4.0f => 2.5f
  1) 산술 변환
   ★ 연산 전에 피연산자의 타입을 일치시키는 것
    long(4) + int(4) => long + long = long
    float + int => f + f = f
   ★ 피연산자의 타입이 int보다 작은 타입이면 int로 변환된다
    char(2) + short(2) => int + int = int

4. 반올림 - Math.round()
- 실수를 소수점 첫 째자리에서 반올림한 정수를 반환
  double pi = 3.141592; 값을 3.142로 나오게 하려면  ?
  math.round(3.141592 * 1000) / 1000.0

5. 나머지 연산자
- 10/8 => 1 , 10%8 => 2 (나머지)
- 나누는 피연산자는 0이 아닌 정수만 허용 (부호무시)

6. 비교연산자
- 두 연산자를 비교해서 true(참) 또는 false(거짓)을 반환
  1) > : 좌변 값이 크면 t
     - 'A' > 'B' => 65 > 66 = f
  2) < : 좌변 값이 작으면 t
  3) >= : 좌변 값이 크거나 작으면 t
  4) <= : 좌변 값이 작거나 같으면 t
  5) == : 두 값이 같으면 t
  6) != : 두 값이 다르면 t
* 문자열을 비교할 때는 ==가 아닌 equals()를 사용한다.
  String str 1 = "abc", str2 = "abc"
  sout(srt1 == str2) = t가 나와야 하는데 f가 나올 수 있음

7. 논리 연산자 && ||
- 조건식을 연결할 때 사용하는 연산자
  1) ||: OR결합, 피연산자 중 어느 한 쪽이 t면 t로 결과
      - i는 2의 배수 또는 3의 배수이다. = i%2==0 || i%3==0
      - i는 2의 배수 또는 3의 배수지만 6의 배수는 아니다 = (i%2==0 || i%3==0) && i%6!=0 (AND가 우선순위가 높긴 하지만 구분)
  2) &&: AND결합, 피연산자 양쪽 모두 t여야 t로 결과
      - x는 10보다 크'고' 20보다 작다 =  10 >  x &&  x < 20
      - 문자 ch는 숫자('0'~'9')이다 = '0' <= ch && ch <='9' *유니코드 참고
      - 문자 ch는 대문자 또는 소문자이다. = ('a' <= ch && ch <='z') || ('A' <= ch && ch <= 'Z')
  3) 논리 부정 연산자 ! (단항연산자, 오른쪽에서 왼쪽으로)
      - true를 false로 false를 true로 바꾼다
        소문자가 아니다 => !('a' <= ch && ch <= 'z')

8. 조건연산자 ? : / 대입연산자
  1) 조건연산자: 조건식의 결과에 따라 연산결과를 달리한다.
    result = (x > y) ? x : y ; 괄호생략가능.
    -> (x > y)가 t면 x가 결과로, f면 y가 결과로
   2) 대입연산자: 오른쪽 피연산자를 왼쪽 피연산자에 저장 후 저장된 값을 반환 ★오른쪽에서 왼쪽으로
    sout(x=3); 변수 x에 3이 저장되고
    sout(3); 연산결과인 3이 출력
* x(lvalue) = 3(rvalue), lvalue는 반드시 변수 또는 배열과 같은 저장공간이다.


 */

public class JAVA8 {
    public static void main(String[] args){

// 사칙연산자
    int a = 1_000_000;
    int b = 2_000_000;

//    long c = a * b;
//    System.out.println(c); // 2,000,000,000,000 가 안나옴, 오버플로우 발생!

    long c = (long)a * b; // 형변환
    System.out.println(c); // 2,000,000,000,000 로 출력

// 반올림 Math.round()

    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.0); // => 3.142
        
    }
}