CH03. 연산자
-
연산 우선순위
(1) 단항, 이항, 삼항 연산자 순으로 우선순위를 가진다
(2) 산술, 비교, 논리, 대입 연산자 순으로 우선순위를 가진다.
(3) 단항과 대입 연산자를 제외한 모든 연산의 방향은 왼쪽에서 오른쪽이다. (→)
(4) 복잡한 연산식에는 괄호() 를 사용해서 우선순위를 정해준다.
-
단항 연산자
피연산자가 단 하나 뿐인 연산자
-
부호 연산자(+/-)
-
증감 연산자
public class IncreaseDecreaseExample { public static void main(String[] args) { int x = 1; int y = 1; int res1 = ++x + 10; int res2 = y++ + 10; System.out.println("res1 = " + res1 + " res2 = " + res2); } }
++i와 i=i+1은 실제로 동일한 바이트 코드가 생성되어 연산속도에는 차이가 없다.
-
논리 부정 연산자(!)
-
비트 반전 연산자(~)
-
-
이항 연산자
피연산자가 두 개인 연산자
-
산술 연산자
-
사칙연산과 나머지 연산 총 5가지
+ 덧셈 - 뺼셈 ***** 곱셈 / 나눗셈 % 나머지
-
-
문자열 연결 연산자 (+)
-
비교 연산자
== 두 피연산자의 값이 같은지 검사 != 두 피연산자의 값이 다른지 검사 > 앞에 있는 피연산자가 큰지를 검사 >= 앞에 있는 피연산자가 크거나 같은지를 검사 < 앞에 있는 피연산자가 작은지를 검사 <= 앞에 있는 피연산자가 작거나 같은지를 검사 -
논리연산자
-
boolean 값만 가질 수 있다.
AND(&&) 피연산자가 모두 true일 경우에만 연산 결과가 true OR(||) 피연산자 중 하나만 true이면 연산 결과가 true XOR(^) 피연산자가 하나는 true이고 다른 하나가 false일 경우에만 연산 결과가 true NOT(!) 피연산자의 논리값을 바꿈
-
-
비트 연산자
-
0과 1로 표현이 가능한 정수 타입만 비트 연산을 할 수 있다.
AND(&) 두 비트 모두 1일 경우에만 연산 결과가 1 OR(|) 두 비트 중 하나만 1이면 연산 결과가 1 XOR(^) 두 비트 중 하나는 1이고 다른 하나가 0일 경우에만 연산 결과가 1 NOT(~) 보수
-
-
비트 이동 연산자
a « b 정수 a의 각 비트를 b만큼 왼쪽으로 이동 (빈자리는 0으로 채워진다.) a » b 정수 a의 각 비트를 b만큼 오른쪽으로 이동 (빈자리는 정수 a의 MSB로 채워진다.) a »> b 정수 a의 각 비트를 b만큼 오른쪽으로 이동 (빈자리는 0으로 채워진다.) -
대입 연산자 (=)
-
-
삼항 연산자
조건식 ? 값 또는 연산식 : 값 또는 연산식
조건식이 true이면 피연산자 2가, false이면 피연산자 3이 결과가 된다.
-
NaN과 Infinity연산
-
0으로 나누면 컴파일은 정상적으로 되지만, ArithmeticException(예외)이 발생한다.
-
실수타입인 0.0 혹은 0.0f로 나누면 예외가 발생하지 않고 ‘/’ 연산의 결과는 Infinity(무한대) 값을 가지고, ‘%’연산의 결과는 NaN(Not a Number)을 가진다.
// Infinity와 NaN 확인 public class CheckInfinityAndNaNExample { public static void main(String[] args) { int x = 5; double y = 0.0; double z = x / y; double mod = x % y; System.out.println(Double.isInfinite(z)); // true System.out.println(Double.isNaN(mod)); // true } }
-