Back-End (Web)/JAVA

[JAVA] 연산자

JABHACK 2024. 11. 11. 12:40

연산자와 피연산자

계산할 때 계산의 대상이 되는 것이 피연산자 이며, 계산의 목적이 되는 것이 연산자입니다.

  • 연산자 : 덧셈, 뺄셈처럼 계산할 기호
  • 피연산자 : 연산자로 인해 계산되는 숫자 🔢

연산자 종류

연산자 종류 대

 

산술~논리 연산자는 비교적 간단히 설명이 가능하다

  • +(덧셈), - (뺄셈), *(곱셈), /(나눗셈/몫), % (나눗셈/나머지)
  • > (크다) , < (작다), >= (크거나 같다), <= (작거나 같다), == (같다), != (다르다)
  • && (AND = 피연산자 모두 참), ||(OR = 피연산자 둘 중 하나라도 참), !(피연산자의 반대 boolean 값)

대입 연산자

  • 변수를 바로 연산해서 그 자리에서 저장하는 연산자
// 대입 연산자
int number = 10;
number = number + 2;
System.out.println(number); // 12

 

+ 복합 대입 연산자 (+=, -=, *= …)

// 복합 대입 연산자
number = 10;
number += 2;
System.out.println(number); // 12

 

위 코드와 아래 코드는 실재로 같은 말이다. 다만 좀 더 짧게 코드를 짜기위해 아래와 같은 형태도 만들어졌다.

 

🔥 대입 연산자 중에 증감 연산자 쓸 때 주의할 점!

  • ++ 또는 —-를 붙이면 피연산자가 1 더해지거나 1 빼기가 된다.
  • 주의할 점은, 피연산자 뒤에 붙이냐, 앞에 붙이냐에 따라서 연산 순서가 달라진다.

연산자 연산자 위치 기능 연산 예 (num=1일 경우)

++ 변수 ++{피연산자} 연산 전에 피연산자에 1 더해줍니다. val = ++num;
num값+1 후에 val변수에 저장 = val =2
변수 ++ {피연산자}++ 연산 후에 피연산자에 1 더해줍니다. val = num++;
num값을 val변수에 저장 후 num+1 = val = 1
- - 변수   —{피연산자} 연산 전에 피연산자에 1 빼줍니다. val = —num;
num값-1 후에 val변수에 저장 = val = 0
변수 - - {피연산자}— 연산 후에 피연산자에 1 빼줍니다. val = num—;
num값을 val변수에 저장 후 num-1 = val =1
  • 이처럼 대입 연산할 때뿐만 아니라 연산을 직접 할 때도 마찬가지로 선/후 적용이 나뉜다. 
  • 연산자 우선순위 : 산술 > 비교 > 논리 > 대입
  • 단, 괄호로 감싸주면 괄호 안의 연산이 최우선 순위로 계산
// 연산자 우선순위
int x = 2;
int y = 9;
int z = 10;

boolean result = x < y && y < z; // <,> 비교연산자 계산 후 && 논리 연산자 계산
System.out.println(result); // true

result = x + 10 < y && y < z; // +10 산술연산자 계산 후 <,> 비교연산자 계산 후 && 논리 연산자 계산
System.out.println(result); // false

result = x + 2 * 3 > y; // 산술연산자 곱센 > 덧셈 순으로 계산 후 > 비교연산자 계산
System.out.println(result); // false (8>9)

result = (x + 2) * 3 > y; // 괄호안 덧셈 연산 후 괄호 밖 곱셈 계산 후 > 비교연산자 계산
System.out.println(result); // true (12>9)

 

 

기타 연산자

  • 형변환 연산자
// 형변환 연산자
int intNumber = 93 + (int) 98.8; // 93 + 98

double doubleNumber = (double) 93 + 98.8; // 93.0 + 98.8

이전 글에 설명한 형변환에 관련된 내용이다. (간단한 설명으로 int는 정수만, double은 실수만을 반환할 수 있다.)

  • 삼항 연산자
  • 비교 연산의 결과값에 따라 응답할 값을 직접 지정할 수 있는 연산자입니다.
  • (조건) ? (참 결과) : (거짓 결과)
// 삼항 연산자
int x = 1;
int y = 9;

boolean b = (x == y) ? true : false;
System.out.println(b); // false

String s = (x != y) ? "정답" : "땡";
System.out.println(s); // 땡

int max = (x > y) ? x : y;
System.out.println(max); // 9

int min = (x < y) ? x : y;
System.out.println(min); // 1

 

  • instance of 연산자
  • 피연산자가 조건에 명시된 클래스의 객체인지 비교하여 참/거짓을 응답해 주는 연산자
  • (객체명) instance of (클래스명)
class Car {}

public class TestInstanceof {
    public static void main(String[] args) {
        Car car = new Car();
        String str = "Hello";

        System.out.println(car instanceof Car); // true
        System.out.println(str instanceof String); // true
        System.out.println(car instanceof String); // false
    }
}

 

  • car instanceof Car → true. car는 Car 클래스의 인스턴스( 객체 )이기 때문에.
  • str instanceof String → true. str은 String 클래스의 인스턴스 ( 객체 ) 이기 때문에.
  • car instanceof String → false. car는 String 클래스의 인스턴스 ( 객체 ) 가 아니므로 false.

연산 주의 사항

📌 연산 전에 피연산자의 타입을 일치시키는 것

  • 두 피연산자의 타입을 같게 일치시킨다. (둘중에 저장공간 크기가 더 큰 타입으로 일치) 
더보기
  • 피연산자의 타입이 int 보다 작은 short 타입이면 int로 변환
  • 피연산자의 타입이 long 보다 작은 int, short 타입이면 Long으로 변환
  • 피연산자의 타입이 float보다 작은 long, int, short 타입이면 float으로 변환
  • 피연산자의 타입이 double 보다 작은 float, long, int, short 타입이면 double으로 변환

 

비트 연산

  • Byte를 8등분 한 게 Bit
  • Bit는 0,1 둘 중의 하나의 값만을 저장하는 컴퓨터가 저장(표현) 가능한 가장 작은 단위
  • 컴퓨터의 가장 작은 단위인 Bit이기 때문에 연산중에서 Bit 연산이 제일 빠르다
  • 물론 이전에 배운 대로 0,1 값으로 산술연산을 하거나, 비교 연산을 할 수 있지만 비트 연산을 통해 자릿수를 옮길 수도 있다.
  • 이처럼 Bit의 자릿수를 옮기는 것을 비트 연산이라고 한다.
  • <<(왼쪽으로 자릿수옮기기), >>(오른쪽으로 자릿수옮기기)
  • 0,1 은 2진수 값이기 때문에,
    • 자릿수를 왼쪽으로 옮기는 횟수만큼 2의 배수로 곱셈이 연산되는 것과 동일하다.
    • 자릿수를 오른쪽으로 옮기는 횟수만큼 2의 배수로 나눗셈이 연산되는 것과 동일하다.
// 비트 연산

// 참고, 3의 이진수값은 11(2) 입니다. 12의 이진수값은 1100(2) 입니다.
// (2) 표기는 이 숫자가 이진수값이라는 표식 입니다.

System.out.println(3 << 2); 
// 3의 이진수값인 11(2) 에서 왼쪽으로 2번 옮겨져서 1100(2) 인 12값이 됩니다.


System.out.println(3 >> 1); 
// 3의 이진수값인 11(2) 에서 오른쪽으로 1번 옮겨져서 1(2) 인 1 값이 됩니다.

 

'Back-End (Web) > JAVA' 카테고리의 다른 글

[JAVA] 반복문  (0) 2024.11.11
[JAVA] 조건문  (0) 2024.11.11
[JAVA] 변수와 변수 종류  (0) 2024.11.11
[JAVA] 자바 개발을 위한 준비물 IntelliJ  (0) 2024.11.11
[JAVA] JVM은 뭘까?  (1) 2024.11.11