[Java] 연산자

허경두·2025년 4월 1일

Java

목록 보기
3/12

연산자란?

  • 연산 : 계산 결과를 반환하는 것
  • 연산자 : 연산을 수행하는 기호
  • 모든 연산자는 반드시 결과를 반환

연산자의 종류

연산자 종류예제설명
산술 연산자+, -, *, /, %기본적인 수학 연산
대입 연산자=, +=, -=, *=, /=, %=변수에 값 할당
증감 연산자++, --값 증가/감소
비교 연산자==, !=, >, <, >=, <=값 비교
논리 연산자&&, ||, !논리 연산
비트 연산자&, |, ^, ~, <<, >>, >>>비트 단위 연산
삼항 연산자? :조건문 대체
instanceof 연산자obj instanceof Class객체 타입 확인
  • 대입 연산자(=)는 자기 자신을 반환(항등 함수)
    대입 연산자는 자기 자신 반환, 할당(write) 두 가지 모두를 의미
  • 모든 연산은 덧셈으로 구현될 수 있음
    • 나눗셈(/)은 뺄셈으로 구현 가능
      5 / 2 = 5 - 2 - 2 = 1 → 2를 두 번 뺐으므로 몫은 2 나머지는 1
    • 비교 = 차이 (뺄셈)
  • 시프트 연산자 (>>, <<)
    • x >> n = x * 2^n
    • x << n = x / 2^n
  • 증감 연산자는 연산과 대입을 모두 수행

    전위 증감과 후위 증감의 차이

    • 단독으로 사용할 때는 같음 (++ii++이 같음)
    • 전위
      j = ++i;
      // 위와 아래 동일
      ++i;
      j = i;
    • 후위
      j = i++;
      // 위와 아래 동일
      j = i;
      i++;

연산자의 우선순위

우선순위연산자설명결합 방향
1 (높음)(), [], .괄호, 배열 접근, 멤버 접근왼 → 오
2++, --, ~, !, (type)단항 연산자 (증감, 비트 반전, 논리 부정, 형변환)오 → 왼
3*, /, %곱셈, 나눗셈, 나머지왼 → 오
4+, -덧셈, 뺄셈 (문자열 연결 포함)왼 → 오
5<<, >>, >>>비트 시프트 연산왼 → 오
6<, <=, >, >=, instanceof비교 연산자왼 → 오
7==, !=동등 비교왼 → 오
8&비트 AND왼 → 오
9^비트 XOR왼 → 오
10``비트 OR
11&&논리 AND왼 → 오
12``
13? :삼항 연산자오 → 왼
14=, +=, -=, *=, /=, %=, &=, `=, ^=, <<=, >>=, >>>=`대입 연산자
15 (낮음),쉼표 연산자왼 → 오

산술 변환

연산 수행 직전에 피연산자의 자동 형변환

  1. 피연산자들 중 가장 큰 타입으로 일치
  2. int 보다 작은 정수는 int 로 일치
// 1. 피연산자들 중 가장 큰 타입으로 일치
int i = 10;
float f = 20.0f;
float result = f + i; // i가 float으로 자동형변환

// 2. int 보다 작은 정수는 int 로 일치
byte b = 1;
int i = 10;
int result = b + i; // b가 int로 자동형변환

추가 지식

  • int a = 60 * 60 * 24 의 방식으로 표현하는 게 변경에 유리, 가독성 좋음 → 컴파일러가 컴파일 시 계산해주므로 성능 저하 없음
  • 실수 비교 시 주의
    0.1f0.1d 는 같지 않음
    0.1f 는 0.100000004 로 0.1d 는 0.100000000...이므로 double 을 float 으로 변환하여 비교해야 함
  • 논리연산자의 효율적인 연산
    논리 연산자는 좌측 피연산자의 값에 따라 우측 피연산자를 평가하지 않으므로 유의해서 식을 작성해야한다

0개의 댓글