JAVA

연산자(Operator)

hohahihi 2023. 3. 2. 19:40

부호 연산자

연산자 연산식 설명
+ +i 양수 부호(피연산자의 부호 유지)
- -i 피연산자의 값을 음수로 변경
  • + 연산자는 잘 사용되지 않음
  • 부호를 변경하는 것도 연산에 해당되므로 정수 타입에서 - 연산자를 사용한 결과 값은 int 타입이 된다.

산술 연산자

연산자 연산식 설명
+ x + y 더하기
- x - y 빼기
* x * y 곱하기
/ x / y 나누기
% x % y 피연산자를 나눈 나머지 연산
  • 정수와 문자열이 "+"로 결합되면 정수가 문자열로 변환된다.
  • 정수 나누기 정수는 결과도 정수이다. (나눈 몫만 결과로 저장되고, 소수점 이하는 버려진다.)

  • 산술 연산 시 정확한 결과를 얻기 위해서는 실수보다 정수 타입을 사용하는 것이 좋다.
    - 실수 타입을 부동 소수점 방식으로 표현하기 때문에 발생하는 문제
    예) 1 - 7*0.1 = 0.29999999999999993

0 나누기와 NaN, Infinity 처리

  • 피연산자가 모두 정수 타입일 때 나누기(/), 나머지(%) 연산 시 분모가 0이면 무한대를 정수로 표현할 수 없기 때문에 예외(ArithmeticException)가 발생한다.

  • 실수 타입의 피연산자가 포함된 나누기(/), 나머지(%) 연산 시 분모가 0.0(f)이면 예외가 발생하지 않지만 결과가 Infinity(0.0으로 / 연산) 또는 NaN(0.0으로 % 연산)이 된다.
    - 이후 다른 연산을 수행해도 Intinity와 NaN은 그대로 유지되기 때문에 연산을 수행하는 의미가 없어진다.

  • 실수 나누기 연산의 결과가 Infinity인지 확인하려면 Double.isInfinite() 메소드를 사용하고, NaN인지 확인하려면 Double.isNaN() 메소드를 사용한다.
    - 매개변수의 값이 Infinity 또는 NaN 이면 true를, 아니면 false를 리턴하는 메소드.

관계 연산자(비교 연산자)

 관계 연산자 : 피연산자의 동등 여부 및 값의 크기를 비교하는 연산자

 

연산자 연산식 설명
== x == y 피연산자의 값이 같은지 확인
!= x != y 피연산자의 값이 다른지 확인
> x > y 좌측 피연산자의 값이 우측보다 큰지 확인
>= x >= y 좌측 피연산자의 값이 우측보다 크거나 같은지 확인
< x < y 좌측 피연산자의 값이 우측보다 작은지 확인
<= x <= y 좌측 피연산자의 값이 우측보다 작거나 같은지 확인
  • 관계 연산자의 결과는 boolean 타입이다. (true/false)
  • 비교는 항상 왼편을 기준으로 비교한다.
  • 부등호는 왼쪽에 작성한다. (<=, >=)

자료형이 다른 연산자 간 비교 연산

  • 피연산자의 자료형이 다를 경우 비교 연산 수행 전에 자료형일 일치시킨다.
    ex) char 타입의 'A'와 int 타입의 65를 == 연산자로 비교 시 'A'는 int 타입의 65로 변환되어 연산을 수행
    ex2) double 타입의 3.0과 int 타입의 3을 == 연산자로 비교 시 3은 double 타입의 3.0으로 변환되어 연산을 수행

실수 자료형의 비교 연산

  • float 자료형과 double 자료형의 비교 연산 시 각 자료형의 정밀도 차이로 인해 예상과 다른 결과가 나올 수 있다.
    ex) 0.5f == 0.5 → false
    float 자료형과 double 자료형을 비교할 때는 double 자료형을 float로 강제 형변환한 후 연산을 수행하면 된다.

문자열의 동등 비교

  • 문자열을 비교할 때는 == 연산자 대신 equals() 메소드를 사용해야 올바른 결과를 얻을 수 있다.
    - 문자열(String)은 참조 타입이기 때문에 == 또는 != 연산자를 사용하면 값이 저장된 주소에 대한 비교 연산을 수행한다.
String str1 = "Hello";
String str2 = "hello";
boolean result = str1.equals(str2);    //false

 


논리 연산자

 논리 연산자 : 연산의 대상 및 결과가 참과 거짓 둘 개의 값 중 하나를 취하는 연산

 

  •  AND, OR, NOT, XOR, NOT 등의 논리 연산을 수행
  • 두 개의 조건을 하나로 만들 때 사용

 

연산자 연산식 설명
& x & y 논리곱(AND) 연산 - 피연산자가 모두 true일 떄만 true
&& x && y
| x | y 논리합(OR) 연산 - 피연산자 중 하나라도 true이면 true
|| x || y
^ x ^ y 배타적 논리합(XOR) 연산 - 피연산자의 논리값이 서로 다른 경우에만 true
! !x 논리 부정(NOT) 연산 - 피연산자의 논리값을 변경(true → false, false → true)

 

※ &(|) 연산자와 &&(||) 연산자의 차이

  • & 연산자는 양쪽 피연산자를 모두 확인한 다음 결과를 산출
  • && 연산자는 앞의 피연산자의 논리값이 true이면 뒤의 피연산자를 확인하지 않고 바로 true로 판단
    - 앞의 피연산자가 false이면 바로 false로 판단
    - | 와 || 연산자도 동일한 방식으로 동작한다.
    - &&(||) 연산자가 &(|) 연산자보다 효율적인 방식으로 동작한다.

 

AND (둘 다 true일 때만 결과가 true)

a b R
T T T
T F F
F T F
F F F

 

OR (둘 중에 하나만 true여도 결과는 true)

a b R
T T T
T F T
F T T
F F F

 

XOR(두 값이 서로 다를 때만 true)

a b R
T T F
T F T
F T T
F F F

증감 연산자

증감 연산자 : 값을 일정하게 증가하거나 감소시키는 연산자

 

연산자 연산식 설명
++ ++i 연산을 수행하기 전에 피연산자의 값을 1 증가
i++ 다른 연산을 수행한 다음에 피연산자의 값을 1 증가 
-- --i 연산을 수행하기 전에 피연산자의 값을 1 감소
i-- 다른 연산을 수행한 다음에 피연산자의 값을 1 감소

대입 연산자

연산자 연산식 설명
= x = 1 우측 피연산자의 값을 좌측 피연산자(변수)에 저장
  • 좌측 피연산자에는 변수만 가능하고, 우측 피연산자는 변수와 리터럴 값, 연산식 모두 가능하다.

복합 대입 연산자

복합 대입 연산자 : 대입 연산자에 다른 연산자를 붙여서 연산 수행 결과를 바로 변수에 대입하는 연산자

 

연산자 연산식 설명
+= x += 2 좌측 변수의 값에 우측 피연산자의 값을 더한 후 다시 변수에 저장
-= x -= 2 좌측 변수의 값에서 우측 피연산자의 값을 뺀 후 다시 변수에 저장
*= x *= 2 좌측 변수의 값과 우측 피연산자의 값을 곱한 후 다시 변수에 저장
/= x /= 2 좌측 변수의 값을 우측 피연산자의 값으로 나눈 후 다시 변수에 저장
%= x %= 2 좌측 변수의 값을 우측 피연산자의 값으로 나눈 나머지를 변수에 저장
&= x &= y 좌측 변수의 값을 우측 피연산자의 값과 논리곱 연산 수행한 결과를 변수에 저장
|= x |= y 좌측 변수의 값을 우측 피연산자의 값과 논리합 연산 수행한 결과를 변수에 저장
^= x ^= y 좌측 변수의 값을 우측 피연산자의 값과 배타적 논리합 연산 수행한 결과를 변수에 저장

삼항(조건) 연산자

  •  (true/false로 반펼 가능한 조건식) ? (true일 때의 결과 값) : (false일 떄의 결과 값)
  • 첫 번째 항의 조건을 판별하여 true이면 두 번째 항을 결과로 취하고, false이면 세 번째 항을 결과로 취한다.
  • 엑셀의 IF() 함수의 사용법과 비슷하다.

연산 우선순위

우선순위 연산자 연산 방향
1 증감(++, --), 부호(+, -), 비트(~), 논리(!)
2 산술(*, /, %)
3 산술(+, -)
4 쉬프트(<<, >>, >>>)
5 비교(<, >, <=, >=, instanceof)
6 비교(==, !=)
7 논리(&)
8 논리(^)
9 논리(|)
10 논리(&&)
11 논리(||)
12 조건(?:)
13 대입(=, +=, -=, *=, /=, %=, &=, ^=, |=, <<=, >>=, >>>=)