본문 바로가기

반응형

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
댓글