📚 이것이 자바다 [개정판]
+
-
- 변수 값의 부호를 변경시키는 연산자
- 부호 변경 후의 타입에 맞게 대입해야 한다
++
--
- 변수의 값을 1씩 증가/감소시키는 연산자
++피연산자
피연산자의 값을 1 증가 시킴피연산자++
다른 연산을 수행한 후 피연산자의 값을 1 증가 시킴
+
-
*
/
%
- 피연산자가 정수 타입(byte, short, char, int)이면 연산 결과는 int타입
- 피연산자가 정수 타입이고 하나가 long타입이면 연산 결과는 long타입
- 피연산자 중 하나가 실수 타입이면 연산 결과는 실수 타입 (강제 타입 변환)
- 오버플로우: 타입이 허용하는 최대값을 벗어나는 것
- 언더플로우: 타입이 허용하는 최소값을 벗어나는 것
- 오버/언더플로우가 발생하면 해당 타입의 최소/최대값으로 되돌아간다
byte value = 127; // byte 최대값 127
value++;
System.out.println(value); // -128(최소값)
value++; // -127
- 나눗셈 또는 나머지 연산에서 발생
int result = 정수 / 0;
정수 / 0, 정수 % 0 → 예외 발생int result = 정수 / 0.0;
정수 / 실수 → Infinityint result = 정수 % 0.0;
정수 % 실수 → NaN- 이 경우, 계속해서 연산을 수행하면 데이터가 엉망이 된다
- 따라서 연산 결과를 확인하고 다음 연산을 수행하는 것이 좋다
Double.isInfinite(변수)
Double.isNaN(변수)
==
!=
>
>=
<
<=
(단, 문자열을 비교하는 경우equals()
사용)- 피연산자의 타입이 다른 경우 비교 연산 수행 전 타입을 일치 시켜야 한다
💡
0.1f == 0.1
일 때 0.1f를 double 타입으로 변환하면 false 산출
float 타입과 double 타입의 정밀도에 차이가 있기 때문이다
따라서,0.1f == (float)0.1
로 타입 변환 후 비교 연산을 시행해야 한다
&&
&
||
|
^
!
💡
&&
||
vs.&
|
&&
||
: 앞의 피연산자가 false라면 뒤의 연산자를 평가하지 않고 바로 false 산출
&
|
: 피연산자를 모두 평가하여 결과를 산출
&
: 두 비트 모두 1일 경우에만 연산 결과가 1|
: 두 비트 중 하나라도 1일 경우 연산 결과가 1^
: 두 비트 중 하나는 1이고 다른 하나는 0일 경우 연산 결과가 1~
: 보수- bit 단위로 논리 연산을 수행하므로 2진수로 저장되는 정수 타입만 피연산자가 될 수 있다
a << b
: a 비트를 b만큼 왼쪽으로 이동 (오른쪽 빈 자리는 0으로 채움)(==a*2^b)a >> b
: a 비트를 b만큼 오른쪽으로 이동 (왼쪽 빈자리는 최상위 부호 비트와 같은 값으로 채움) (==a/2^b)a >>> b
: a의 각 비트를 b만큼 오른쪽으로 이동 (왼쪽 빈 자리는 0으로 채움)
=
+=
-=
*=
/=
%=
&=
|=
^=
<<=
>>=
>>>=
조건식 ? true일 때 실행문 : false일 때 실행문