7. 이항연산자의 특징
이항연산자는 연산을 수행하기 전에 피연산자의 타입을 일치시킨다.
- int보다 크기가 작은 타입은 int로 변환한다. ex. byte, char, short > int - 피연산자 중 표현범위가 큰 타입으로 형변환 한다. char + int > int + int > int float + int > float + float > float long + float > float + float > float float + double > double + double > double |
byte a = 10; byte b = 20; byte c = a + b; error byte c = (byte)a + b; error byte c = (byte)(a + b); O |
int a = 1000000; 1,000,000 int b = 2000000; 2,000,000 long c = a * b; >> -1454759936 (int * int > int) long c = (long)a * b; >> 2000,000,000,000 (long * int > long * long > long) |
long a = 1000000 * 1000000; >> a = -727,379,968 long b = 1000000 * 1000000L; >> b = 1,000,000,000,000 int c = 1000000 * 1000000; >> c = -727 int d = 1000000 / 1000000 * 1000000; >> d = 1,000,000 |
char c1 = 'a'; char c2 = c1 + 1; error char c2 = (char)(c1 + 1) O char c2 = ++c1; O int i = 'B' = 'A'; int i = '2' - '0'; |
floar pi = 3.141592f; floar shortPi = (int)(pi * 1000) / 1000f; = (int)(3.141592f * 1000) / 1000f; = (int)(3141.592f) / 1000f; = 3141 / 1000f; = 3141.0f / 1000f = 3.141f |
Math.round() : 소수점 첫째자리에서 반올림한 값을 반환 float pi = 3.141592f; float shortPi = Math.round(pi * 1000) / 1000f; = Math.rount(3.141592f * 1000) / 1000f; = Math.round(3141.592f) / 1000f; = 3141 / 1000f; = 3141.0f / 1000f = 3.142f |
8. 나머지 연산자 - %
- 나누기한 나머지를 반환한다.
- 홀수 짝수 등 배수검사에 주로 사용.
ex.
int share = 10 / 8;
int remain = 10 % 8;
➡️10 % 8 ➡️ 2
10 % -8 ➡️ 2
-10 % 8 ➡️ -2
-10 % -8 ➡️ -2
9. 쉬프트 연산자 - <<, >>, >>>
- 2ⁿ으로 곱하거나 나눈 결과를 반환한다.
- 곱셈, 나눗셈보다 빠르다.
x << n = x * 2ⁿ
x >> n = x / 2ⁿ
8 << 2 = 8 * 2²
8 >> 2 = 8 / 2²
10. 비교 연산자 - >, <, >=, <=, ==, !=
- 피연산자를 같은 타입으로 변환한 후에 비교한다. 결과값은 true 또는 false이다.
- 기본형(boolean 제외)과 참조형에 사용할 수 있으나 참조형에는 ==와 !=만 사용할 수 있다.
수 식 | 연 산 결 과 |
x > y | x가 y보다 클 때 true, 그 외에는 false |
x < y | x가 y보다 작을 때 true, 그 외에는 false |
x >= y | x가 y보다 크거나 같을 때 true, 그 외에는 false |
x <= y | x가 y보다 작거나 같을 때 true, 그 외에는 false |
x == y | x와 y가 같은 때 true, 그 외에는 false |
x != y | x와 y가 다를 때 true, 그 외에는 false |
'A' < 'B' ➡️ 65 < 66 ➡️ true
'0' == 0 ➡️ 48 == 0 ➡️ false
'A' != 65 ➡️ 65 != 65 ➡️ false
10.0d == 10f ➡️ 10.0d == 0.1d ➡️ 10.0d > true
0.1d == 0.1f ➡️ 0.1d == 0.1d ➡️ true? false?
➡️ double d = (double)0.1f;
➡️ syso(d); ➡️ 0.10000000149011612
➡️ (float)0.1d == 0.1f
➡️ o.1f == 0.1f ➡️ true
11. 비트 연산자 - &, |, ^
- 피연산자를 비트단위로 연산한다. 실수형(float, double)을 제외한 모든 기본형에 사용가능
▶️ OR연산자 (|) : 피연산자 중 어느 한 쪽이 1이면 1이다.
▶️ AND연산자 (&) : 피연산자 양 쪽 모두 1이면 1이다.
▶️ XOR연산자 (^) : 피연산자가 서로 다를 때 1이다.
x | y | x|y | x&y | x^y |
1 | 1 | 1 | 1 | 0 |
1 | 0 | 1 | 0 | 1 |
0 | 1 | 1 | 0 | 1 |
0 | 0 | 0 | 0 | 0 |
식 | 2진수 | 10진수 |
3 | 5 = 7 | 0 0 0 0 0 0 1 1 | ) 0 0 0 0 0 1 0 1 |
3 |
5 | ||
0 0 0 0 0 1 1 1 | 7 | |
3 & 5 = 1 | 0 0 0 0 0 0 1 1 & ) 0 0 0 0 0 1 0 1 |
3 |
5 | ||
0 0 0 0 0 0 0 1 | 1 | |
3 ^ 5 = 6 | 0 0 0 0 0 0 1 1 ^ ) 0 0 0 0 0 1 0 1 |
3 |
5 | ||
0 0 0 0 0 1 1 0 | 6 |
0x185C >> 4 ➡️ 0x0185
0x185C ➡️ 0001100001011100
0x0185 ➡️ 0000000110000101
0x0185 & 0x000F ➡️ 0x0005
0x0185 ➡️ 0000000110000101
0x000F ➡️ 0000000000001111
0x0005 ➡️ 0000000000000101
12. 논리 연산자 - &&, ||
- 피연산자가 반드시 boolean이어야 하며 연산 결과도 boolean이다.
&&가 || 보다 우선순위가 높다. 같이 사용되는 경우 괄호를 사용하자
▶️ OR연산자 (||) : 피연산자 중 어느 한 쪽이 true이면 true이다.
▶️ AND연산자 (&&) : 피연산자 양 쪽 모두 true이면 true이다.
x | y | x || y | x && y |
true | true | true | true |
true | false | true | false |
false | true | true | false |
false | false | false | false |
13. 삼항 연산자 - ? :
- 조건식의 연산결과가 true이면 '식1'의 결과를 반환하고 false이면 '식2'의 결과를 반환한다.
(조건식) ? 식1 : 식2
ex 1. int x = -10;
int absX = x > =0 ? x: -x; ➡️ ansX = 10
ex 2. int score = 50;
char grade = score >= 90 ? 'A' : (score >= 80 ? 'B' : 'C'); ➡️ grade = 'C'
14. 대입 연산자 - =, op=
- 오른쪽 피연산자의 값을 왼쪽 피연산자에 저장한다.
단, 왼쪽 피연산자는 상수가 아니어야 한다.
ex 1. int i = 0;
i = i + 3; ➡️ i = 3
ex 2. final int MAX = 3;
MAX - 10; ➡️ error
ex 3. int op = 50;
op += 4; ➡️ op = 54
'스터디 > 자바' 카테고리의 다른 글
[Java] 자바 : 2. 연산자 (Operator) 1 (0) | 2024.01.04 |
---|---|
[Java] 자바 : 1. 변수 2 (1) | 2024.01.04 |
[Java] 자바 : 1. 변수 1 (1) | 2024.01.03 |
[Java] 자바 : 개요 (0) | 2024.01.02 |