웹 프로그래밍/JAVA

[JAVA] 연산자

아장아장 초보 개발자 2021. 11. 19. 22:40
728x90
반응형

해당 글은 남궁성님의 자바의 정석을 학습 후에 작성되었습니다.

 

연산자 : 연산을 수행하는 기호 (+, -, *, /)

피연산자 : 연산자의 연산 수행 대상

모든 연산자는 연산 결과를 반환한다.

연산자의 종류

  • 산술 연산자 : 사칙 연산과 나머지 연산
    • +, -, *, /, %, <<, >>
  • 비교 연산자 : 크고 작음과 같고 다름을 비교
    • <, >, <=, >=, ==, !=
  • 논리 연산자 : 그리고(AND)와 또는(OR)으로 조건을 연결
    • &&, ||, !, &, |, ^, ~
  • 대입 연산자 : 우변의 값을 좌변에 저장
    • =
  • 기타 : 형변환 연산자, 삼항 연산자, instanceof 연산자
    • (type), ?:, instanceof

연산자의 우선 순위

  • 하나의 식에 연산자가 둘 이상 있을 때, 어떤 연산을 먼저 수행할 지 자동 결정하는 것
  • 먼저 수행하고 싶은 것이 있을 경우 ()를 사용해서 결정할 수 있다.

  1. 산술 > 비교 > 논리 > 대입 (대입 연산자가 가장 마지막에 수행된다)
  2. 단항 > 이항 > 삼항 (단항 연산자의 우선 순위가 이항 연산자보다 높다)
  3. 단항 연산자와 대입 연산자를 제외한 모든 연산의 진행방향은 왼쪽에서 오른쪽이다

증감 연산자

증가 연산자(++) : 피연산자의 값을 1 증가시킨다
감소 연산자(--) : 피연산자의 값을 1 감소시킨다

 

전위형 : 값이 참조되기 전에 증가시킨다

int i = 3;
int j = ++i;
--------------
++i;
j = i;

후위형 : 값이 참조된 후에 증가시킨다

int i = 3;
int j = i--;
--------------
j = i;
i++;

증감 연산자가 독립젹으로 사용된 경우, 전위형과 후위형의 차이가 없다

부호 연산자

'-' : 피연산자의 부호를 반대로 변경

'+' : 아무런 일도 하지 않는다 (실제 사용 X)

int i = 10;
i = -i; // i = -10
i = -i; // i = -(-10) = 10

형변환 연산자

변수 또는 상수의 타입을 다른 타입으로 변환하는 것

// (타입)피연산자
double d = 85.4;
int score = (int) d; // score = 85
  • int -> char
    • (char)65 = 'A' (유니코드에서 65가 'A'이기 때문)
  • char -> int
    • (int)'A' = 65
  • float -> int
    • (int)1.6f = 1
  • int -> float
    • (float)10 = 10.0f

자동 형변환

  • 컴파일러가 자동으로 형변환을 해주는 것
    Float f = 1234; // int 보다 float가 훨씬 크기 때문에 허용해준다. (형변환을 생략하여 사용) 
    
    int i = 3.14f // error. float가 int보다 크기 때문에 값이 잘릴 수 있다. 
    // 즉, 값 손실이 발생할 수 있다. 이런 경우 컴파일러가 자동 형변환을 해줄 수 없으므로 수동으로 형변환을 해줘야 한다.​
  • 기존의 값을 최대한 보존할 수 있는 타입으로 자동 형변환된다.

사칙 연산자

+, -, *, /

산술 변환

  • 연산 전에 피연산자의 타입을 일치시키는 것
    • 두 피연산자의 타입을 같게 일치시킨다 (큰 타입으로 일치 시킨다 : 값 손실을 없게 하기 위해)
      • long + int -> long + long -> long
      • float + int -> float + float -> float
    • 피연산자의 타입이 int보다 작은 타입이면 int로 변환된다
      • byte + short -> int + int -> int
      • char + short -> int + int -> int

나머지 연산자 %

오른쪽 피연산자로 나누고 남은 나머지를 반환

int x = 10;
int y = 8;
int r = x % y; // 2

비교 연산자

두 피연산자를 비교해서 true(참) 또는 false(거짓)을 반환

비교연산자 연산 결과
> 좌변 값이 크면 true 아니면 false
< 좌변 값이 작으면 true 아니면 false
>= 좌변 값이 크거나 같으면 true 아니면 false
<= 좌변 값이 작거나 같으면 true 아니면 false
== 두 값이 같으면 true 아니면 false
!= 두 값이 다르면 true 아니면 false

문자열 비교할 경우 == 대신 equals()를 사용해야 한다

논리 연산자

조건식을 연결할 때 사용하는 연산자

  • || (OR 결합) : 피연산자 중 어느 한 쪽이 true이면 true를 결과로 얻는다
  • &&(AND 결합) : 피연산자 양쪽 모두 true여야 true를 결과로 얻는다
// x는 10보다 크고 20보다 작다
x > 10 && x < 20

// i는 2의 배수 또는 3의 배수이다
i%2==0 || i%3==0

// 문자 ch는 대문자 또는 소문자이다
('a' <= ch && ch <= 'z') || ('A' <= ch && ch <= 'Z')

논리 부정 연산자

true를 false로, false는 true로 바꾼다

조건 연산자

조건식의 결과에 따라 연산 결과를 달리한다

int x = 3;
int y = 4;
int result = (x>y) ? x : y; // result = y = 4

대입 연산자

오른쪽 피연산자를 왼쪽 피연산자에 저장 후 저장된 값을 반환

int x = 3; // x = 3

 

728x90
반응형