자바

자바 - 연산자

로기221 2023. 1. 5. 15:59
728x90
반응형

부호 연산자

  • 부호 연산자는 변수의 부호를 유지하거나 변경
연산식 설명
+ 피연산자 피연산자의 부호 유지
- 피연산자 피연산자의 부호 변

 

증감 연산자

  • 증감 연산자는 변수의 값을 1 증가시키거나 1감소시킴
연산식 설명
++ 피연산자 피연산자의 값을 1 증가시킴
-- 피연산자 피연산자의 값을 1 감소시킴
피연산자 ++ 다른 연산을 수행한 후 피연산자의 값을 1 증가시킴
피연산자 -- 다른 연산을 수행한 후 피연산자의 값을 1 감소시킴

 

산술 연산자

  • 더하기(+), 빼기(-), 곱하기(*), 나누기(/), 나머지(%)로 총 5개
연산식 설명
피연산자 + 피연산자 덧셈 연산
피연산자 - 피연산자 뺄셈 연산
피연산자 * 피연산자 곱셈 연산
피연산자 / 피연산자 나눗셈 연산
피연산자 % 피연산자 나눗셈의 나머지를 산출하는 연

 

오버플로우

  • 타입이 허용하는 최대값을 벗어나는 것

언더플로우

  • 타입이 허용하는 최소값을 벗어나는 것

정수 연산

  • 산술 연산을 정확하게 계산하려면 실수 타입을 사용하지 않는 것이 좋음
  • 정확한 계산이 필요하면 정수 연산으로 변경

 

나눗셈 연산에서 예외 방지하기

  • 나눗셈(/) 또는 나머지(%) 연산에서 좌측 피연산자가 정수이고 우측 피연산자가 0일 경우 ArithmeticException 발생
  • 좌측 피연산자가 실수이거나 우측 피연산자가 0.0 또는 0.0f 이면 예외가 발생하지 않고 연산의 결과는 Infinity(무한대) 또는 NaN(Not a Number)이 됨
5 / 0.0 -> Infinity
5 % 0.0 -> NaN
  • Infinity 또는 NaN 상태에서 계속해서 연산을 수행하면 안됨
  • Double.isInfinite()와 Double.isNaN()를 사용해 /와 % 연산의 결과가 Infinity 또는 NaN인지 먼저 확인하고 다음 연산을 수행하는 것이 좋음

비교 연산자

  • 비교 연산자는 동등(==, !=) 또는 크기 (<,<=,>,>=)를 평가해서 boolean 타입인 true/false를 산출
  • 흐름 제어문인 조건문(if), 반복문(for,while) 에서 실행 흐름을 제어할 때 주로 사용
구분 연산식 설명
동등
비교
피연산자1 == 피연산자2 두 피연산자의 값이 같은지를 검사
피연산자1 != 피연산자2 두 피연산자의 값이 다른지를 검사
크기
비교
피연산자1 > 피연산자2 피연산자1이 큰지를 검사
피연산자1 >= 피연산자2 피연산자1이 크거나 같은지를 검사
피연산자1 < 피연산자2 피연산자1이 작은지를 검사
피연산자1 <= 피연산자2 피연산자1이 작거나 같은지를 검사
  • 문자열을 비교할 때는 동등(==,!=) 연산자 대신 equals()와 !equals()를 사용

논리 연산자

  • 논리곱(&&), 논리합(||), 배타적 논리합(^) 그리고 논리부정(!) 연산을 수행
  • 흐름 제어문인 조건문(if), 반복문(for, while) 등에서 주로 이용
구분 연산식 결과 설명
AND
(논리곱)
true &&
또는
&
true true 피연산자 모두가 true일 경우에만
연산 결과가 true
true false false
false true false
false false false
OR
(논리합)
true ||
또는
|
true true 피연산자 중 하나만 true이면
연산 결과는 true
true false true
false true true
false false false
XOR
(배타적 논리합)
true ^ true false 피연산자가 하나는 true이고 
다른 하나가 false일 경우에만
연산 결과가 true
true false true
false true true
false false false
NOT
(논리 부정)
  ! true false 피연산자의 논리값을 바꿈
false true

 

 

비트 논리 연산자

  • bit 단위로 논리 연산을 수행. 0과 1이 피연산자가 됨
  • byte, short, int, long 만 피연산자가 될 수 있고, float, double은 피연산자가 될 수 없음
구분 연산식 결과 설명
AND
(논리곱)
1 & 1 1 두 비트 모두 1일 경우에만
연산결과가 1
1 0 0
0 1 0
0 0 0
OR
(논리합)
1 | 1 1 두 비트 중 하나만 1이면
연산 결과는 1
1 0 1
0 1 1
0 0 0
XOR
(배타적 논리합)
1 ^ 1 0 두 비트 중 하나는 1이고
다른 하나가 0일 경우
연산 결과는 1
1 0 1
0 1 1
0 0 0
NOT
(논리 부정)
  ~ 1 0 보수
    0 1

 

비트 이동 연산자

  • 비트를 좌측 또는 우측으로 밀어서 이동시키는 연산을 수행
구분 연산식 설명
이동
(shift)
a << b 정수 a의 각 비트를 b만큼 왼쪽으로 이동
오른쪽 빈자리는 0으로 채움
a x 2^b 와 동일한 결과가 됨
a >> b 정수 a의 각 비트를 b만큼 오른쪽으로 이동
왼쪽 빈자리는 최상위 부호 비트와 같은 값으로 채움
a / 2^b와 동일한 결과가 됨
a >>> b 정수 a의 각 비트를 b만큼 오른쪽으로 이동
왼쪽 빈자리는 0으로 채움

 

대입 연산자

  • 우측 피연산자의 값을 좌측 피연산자인 변수에 대입. 우측 피연산자에는 리터럴 및 변수, 다른 연산식이 올 수 있음
  • 단순히 값을 대입하는 단순 대입 연산자와 정해진 연산을 수행한 후 결과를 대입하는 복합 대입 연산자가 있음
구분 연산식 설명
단순 대입
연산자
변수 = 피연산자 우측 피연산자의 값을 변수에 저장
복합 대입 
연산자
변수 += 피연산자 우측 피연산자의 값을 변수의 값과 더한 후에 다시 변수에 저장
(변수 = 변수 + 피연산자)
변수 -= 피연산자 우측 피연산자의 값을 변수의 값과 뺀 후에 다시 변수에 저장
(변수 = 변수 - 피연산자)
변수 *= 피연산자 우측 피연산자의 값을 변수의 값과 곱한 후에 다시 변수에 저장
(변수 = 변수 * 피연산자)
변수 /= 피연산자 우측 피연산자의 값을 변수의 값과 나눈 후에 다시 변수에 저장
(변수 = 변수 / 피연산자)
변수 %= 피연산자 우측 피연산자의 값을 변수의 값과 나눈 후에 나머지를 변수에 저장
(변수 = 변수 % 피연산자)
변수 &= 피연산자 우측 피연산자의 값을 변수의 값을 & 연산 후 다시 변수에 저장
(변수 = 변수 & 피연산자)
변수
|=
피연산자 우측 피연산자의 값을 변수의 값을 | 연산 후에 다시 변수에 저장
(변수 = 변수 | 피연산자)
변수 ^= 피연산자 우측 피연산자의 값을 변수의 값을 ^ 연산 후에 다시 변수에 저장
(변수 = 변수 ^ 피연산자)
변수 <<= 피연산자 우측 피연산자의 값을 변수의 값을 << 연산 후에 다시 변수에 저장
(변수 = 변수 << 피연산자)
변수 >>= 피연산자 우측 피연산자의 값을 변수의 을 >> 연산 후에 다시 변수에 저장
(변수 = 변수 >> 피연산자)
변수 >>>= 피연산자 우측 피연산자의 값을 변수의 을 >>> 연산 후에 다시 변수에 저장
(변수 = 변수 >>> 피연산자)

 

 

삼항 연산자 

  • 총 3개의 피연산자를 가짐
  • ? 앞의 피연산자는 boolean 변수 또는 조건식. 이 값이 true이면 콜론(:) 앞의 피연산자가 선택되고, false 이면 콜론 뒤의 피연산자가 선택됨

연산이 수행되는 순서

  • 덧셈(+), 뺄셈(-) 연산자보다는 곱샙(*), 나눗셈(/) 연산자가 우선. &&보다는 >,< 가 우선순위가 높음
  • 우선순위가 같은 연산자의 대부분 왼쪽에서부터 오른쪽으로 (->) 연산을 수행
연산자 연산 방향 우선순위
증감(++,--), 부호(+,-), 비트(~), 논리(!) <--------------------- 높음

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

낮음
산술(*,/,%) --------------------->
산술(+,-) --------------------->
쉬프트(<<.>>,>>>) --------------------->
비교(<,>,<=,>=, instanceof) --------------------->
비교(==, !=) --------------------->
논리(&) --------------------->
논리(^) --------------------->
논리(|) --------------------->
논리(&&)> --------------------->
논리(||)> --------------------->
조건(?:) --------------------->
대입(=, +=, -=, *=, /=, %=, &=, ^=, !=, <<=, >>=, >>>=) <---------------------

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90
반응형