8. 연산자_2
// 연산자_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
}
}