티스토리 뷰
3.1 부호/증감 연산자
부호연산자
- 연산자의 결과는 int타입
+ | 부호 유지 |
- | 부호 변경 |
증감 연산자
++i / --i | 값을 1 증가 혹은 감소 |
i++ / i-- | 다른 연산을 먼저 수행한 후에 증가 혹은 감소 |
예시
int x = 1;
int y = 1;
int result1 = ++x + 10;
// x의 값을 먼저 증가 1 + 1 = 2
// result = 2 + 10 -> 12
int result2 = y++ + 10;
// result = 1 + 10 -> 11
// 그 후에 y의 값을 증가 1 + 1 = 2
3.2 산술 연산자
- byte, short, char, int의 결과는 int
- long가 있으면 결과는 long
- 실수가 있으면 결과는 실수 타입
+ | 덧셈 |
- | 뺄셈 |
* | 곱셈 |
/ | 나눗셈 |
% | 나머지 구하기 |
3.3 오버플로우와 언더플로우
오버플로우
: 타입이 허용하는최대값
을 벗어나는 것 -> 타입의 최소값으로 돌아감언더플로우
: 타입이 허용하는최소값
을 벗어나는 것 -> 타입의 최대값으로 돌아감
오버플로우 예시
byte value = 127;
value++;
System.out.print(value); // 128이 되어 오버플로우 발생 -> 최소값인 -127 출력
언더플로우 예시
byte value = -127;
value--;
System.out.print(value); // -128이 되어 언더플로우 발생 -> 최대값인 127 출력
3.4 정확한 계산은 정수 연산으로
- 실수 타입은 부동 소수점 방식을 사용하기 때문에 약간의 오차 발생
- 따라서 정확한 계산은 정수 타입으로 하는 것이 좋다.
(아마도 부동 소수점은 이진수로 실수를 표현하는데 일부 실수를 이진수로 완벽하게 표현하기 어렵다. 때문에 일부 소수는 오차가 발생하는 것 같다.)
3.5 나눗셈 연산 후 NaN과 Infinity 처리
정수 / 0 일 때 ArithmeticExecption 발생
5 / 0
5 % 0
실수 / 0.0 혹은 0.0f일 때 Infinity 또는 NaN(Not a Number)이 된다. (예외는 아님)
5 / 0.0 -> Infinity
5 % 0.0 -> NaN
- 먼저 확인하고 연산 수행하는 것이 좋다.
boolean result = Double.isInfinite(변수);
boolean result = Double.isNaN(변수);
3.6 비교 연산자
== | 동등한지 |
!= | 다른지 |
> | 큰지 |
>= | 크거나 같은지 |
< | 작은지 |
<= | 작거나 같은지 |
- 연산 수행 전에 (자동으로) 타입을 일치시킨다.
- 부동 소수점 방식을 사용하는 실수 타입은 0.1을 정확하게 표현할 수 없어 false가 산출되기 때문에 강제로 타입 변환을 한 후에 비교 연산을 한다.
0.1f == 0.1 -> false
0.1f == (float) 0.1 -> true
- 문자열 비교는 ==, != 대신 equals()를 사용
3.7 논리 연산자
&& | 모두 true / 앞이 false면 뒤는 판단하지 않음 |
& | 모두 true / 앞뒤 모두 false인지 판단 후에 결정 |
|| | 모두 false / 앞이 true면 뒤는 판단하지 않음 |
| | 모두 false / 앞뒤 모두 false인지 판단 후에 결정 |
^ | 하나는 true 다른 하나가 false |
! | 피연산자의 논리값을 바꿈 |
3.8 비트 논리 연산자
- bit 단위로 논리 연산 수행
- 2진수 0과 1로 저장되는 정수타입만 사용 가능
- 실수 타입은 사용 불가능
- int 타입으로 자동 변환한 후 연산 수행
& | 모두 1일 때 1 |
\ | 둘 중 하나만 1일 때 1 |
^ | 하나는 1 다른 하나가 0일 때 1 |
~ | 보수 |
3.9 비트 이동 연산자
- 비트를 좌측 또는 우측으로 밀어서 이동시키는 연산 수행
3.10 대입 연산자
단순 대입 연산자
= | 우측 값을 좌측 변수에 저장 |
복합 대입 연산자
+= | 우측의 값과 변수의 값을 더한 후에 변수에 저장 |
-= | 우측의 값과 변수의 값을 뺀 후에 변수에 저장 |
*= | 우측의 값과 변수의 값을 곱한 후에 변수에 저장 |
/= | 우측의 값과 변수의 값을 나눈 후에 변수에 저장 |
%= | 우측의 값으로 변수의 값을 나눈 후에 나머지를 변수에 저장 |
&= | 우측의 값과 변수의 값을 & 연산 후에 결과를 저장 |
|= | 우측의 값과 변수의 값을 \| 연산 후에 결과를 변수에 저장 |
^= | 우측의 값과 변수의 값을 ^ 연산 후에 결과를 변수에 저장 |
<<= | 우측의 값과 변수의 값을 << 연산 후에 결과를 변수에 저장 |
>>= | 우측의 값과 변수의 값을 >> 연산 후에 결과를 변수에 저장 |
>>>= | 우측의 값과 변수의 값을 >>> 연산 후에 결과를 변수에 저장 |
3.11 삼항 연산자
조건 `?` 조건이 `true`일 때 연산식 `:` 조건이 `false`일 때 연산식
3.12 연산의 방향과 우선순위
- 연산자 사이에는 우선순위가 있고, 우선순위가 높은 순으로 우선 처리 됨
- 우선순위가 같을 떄는 연산의 방향에 따라 외쪽에서 오른쪽 -> 으로 연산 수행
- 대입 연산자는 오른쪽에서 왼쪽 <- 으로 연산 수행
- 먼저 처리해야할 연산은 괄호()로 묶는 것이 좋다.
'도서 및 강의 > 이것이 자바다' 카테고리의 다른 글
이것이 자바다 3판 챕터 6 (0) | 2024.08.26 |
---|---|
이것이 자바다 3판 챕터 5 (0) | 2024.08.25 |
이것이 자바다 3판 챕터 4 (0) | 2024.08.25 |
이것이 자바다 3판 챕터 2 (0) | 2024.08.25 |
이것이 자바다 3판 챕터 1 (0) | 2024.08.25 |
최근에 올라온 글