Java Study

Java 연산자

Z00_HWAN_99 2024. 6. 17. 14:27
728x90
반응형

이전 글에서 각각의 데이터 종류와 메모리 크기 등을 알아보았었습니다.

그러면 원하는 변수에 값을 할당하고 목표에 맞는 연산을 하기 위해서 쓰이는 다양한 연산자에 대해서 알아보도록 하겠습니다.

 

부호 연산자

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

 

증감 연산자

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

 

산술연산자

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

 

오버플로우 VS 언더플로우

  • 오버플로우 : 타입이 허용하는 최대값을 벗어나는 것
  • 언더플로우 : 타입이 하용하는 최소값을 벗어나는 것

정수 연산

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

나눗셈 연산 후 NaN과 Infinity 처리

  • 나눗셈(/) 또는 나머지(%)연산에서 좌측 피연산자가 정수이고 우측 피연산자가 0일 경우 ArithmeticException 발생
  • 좌측 피연산자가 실수이거나 우측 피연산가 0.0 또는 0.0f이면 예외가 발생하지 않고 연산의 결과는 Infinity(무한대) 또는 NaN(Not a Number)이 됨.
  • 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 피연산자가 중 하나만 ture이면 연산 결과는 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 ^ 0 0 두 비트 중 하나는 1이고 다른 하나가 0일 경우 연산 결과는 1
1 1 1
0 1 1
0 0 0
NOT(논리부정)   ~ 1 0 보수
    0 1

 

비트 이동 연산자

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

 

대입 연산자

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

 

삼항(조건) 연산자

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

연산의 방향과 우선순위

  • 덧셈(+), 뺄셈(-) 연산자보다는 곱셈(*), 나눗셈(/) 연산자가 우선.
  • &보다는 >, <가 우선 순위가 높음(>.< ㅎㅎ)
  • 우선 순위가 같은 연산자의 경우 대부분 왼쪽에서부터 오른쪽으로 (->) 연산을 수행.
연산자 연산 방향 우선 순위
증감(++, --), 부호(+, -), 비트(~), 논리(!) <---------------- 높음
산술(*, /, %) ---------------->
산술(+, -) ---------------->
쉬프트(<<, >>, >>>) ---------------->
비교(<, >, <=, >=, instanceof) ---------------->
비교(==, !=) ---------------->
논리(&) ---------------->
논리(^) ---------------->
논리(|) ---------------->
논리(&&) ---------------->
논리(||) ---------------->
조건(?:) ---------------->
대입(=, +=, -=, *=, /=, %=, ^=, !=, <<=, >>=, >>>=) <---------------- 낮음

 

https://github.com/bottomsUp-99

 

bottomsUp-99 - Overview

Backend Developer. bottomsUp-99 has 10 repositories available. Follow their code on GitHub.

github.com

 

728x90
반응형

'Java Study' 카테고리의 다른 글

Java 조건문과 반복문  (0) 2024.06.18
Maven 과 Gradle의 차이  (2) 2024.06.17
JVM(Java Virtual Machine)의 실행 과정  (0) 2024.06.16
JVM(Java Virtual Machine)의 구조  (0) 2024.06.16
자바 타입 변환  (0) 2024.06.16