언어/Java

연산자

O_oz 2023. 8. 20. 16:18
반응형

1. 연산자와 연산식

연산자 (operator) : 연산에 사용되는 표시나 기호

피연산자 (operand) : 연산되는 데이터

연산식 (expressions) : 연산자와 피연산자를 이용하여 연산의 과정을 기술한 것 / 반드시 하나의 값을 산출

연산자 종류 연산자 피연산자 수 산출값 기능 설명
산술 +, -, *, /, % 이항 숫자 사칙연산 및 나머지 계산
부호 +, - 단항 숫자 음수와 양수의 부호
문자열 + 이항 문자열 두 문자열을 연결
대입 =, +=, -=, *=, /=, %=, &=, ^=, |=, <<=, >>=, >>>= 이항 다양 우변의 값을 좌변의 변수에 대입
증감 ++, -- 단항 숫자 1 만큼 증가/감소
비교 ==, !=, >, <, >=, <=,  instanceof 이항 boolean 값의 비교
논리 !, &, |, &&, || 단항, 이항 boolean 논리적 NOT, AND, OR 연산
조건 (조건식) ? A : B 삼항 다양 조건식에 따라 A 또는 B 중 하나를 선택
비트 ~, &, |, ^ 단항, 이항 숫자, boolean 비트 NOT, AND, OR, XOR 연산
쉬프트 >>, <<, >>> 이항 숫자 비트를 좌측/우측으로 밀어서 이동

 

2. 연산 방향과 우선순위

단항, 이항, 삼항 연산자 순으로 우선순위를 가짐

산술, 비교, 논리, 대입 연산자 순으로 우선순위를 가짐

단항과 대입 연산자를 제외한 모든 연산의 방향은 왼쪽에서 오른쪽

복잡한 연산식에는 괄호 ()를 사용해서 우선순위를 정함

연산자 연산방향 우선순위
증감 (++, --), 부호 (+, -), 비트 (~), 논리 (!) 높음
























낮음
산술 (*, /, %)
산술 (+, -)
쉬프트 (<<, >>, >>>)
비교 (<, >, <=, >=, instanceof)
비교 (==, !=)
논리 (&)
논리 (^)
논리 (|)
논리 (&&)
논리 (||)
조건 (? :)
대입 (=, +=, -=, *=, /=, %=, &=, ^=, |=, <<=, >>=, >>>=)

 

3. 단항 연산자

부호 연산자 (+, -)

    - 양수 및 음수를 표시 / 변수 값의 부호를 바꾸기 위해 사용

    - boolean 타입과, char 타입을 제외한 나머지 기본 타입에 사용

    - 산술 연산자와 부호 연산자의 역할 또한 가능한 +, -는 부호 연산자로 쓰일 때에는 하나의 피연산자만 필요

    - 산출 타입은 int 타입

 

증감 연산자 (++, --)

    - 변수의 값을 1 증가 시키거나 1 감소 시킴

    - boolean 타입을 제외한 모든 기본 타입에 사용

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

논리 부정 연산자 (!)

    - true를 false로, false를 true로 변경 / boolean 타입에만 사용

    - 조건문과 제어문에서 사용되어 조건식의 값을 부정하도록 해서 실행 흐름을 제어할 때 주로 사용

    - 토글 (toggle) : 두 가지 상태 (true/ false)를 번갈아가며 변경하는 기능

 

비트 반전 연산자 (~)

    - 피연산자를 2진수로 표현했을 때 비트값인 0을 1로, 1은 0으로 반전시킴 / 연산 후 모든 비트가 반전되기 때문에 부호가 반대인 새로운 값이 산출됨

    - 정수 타입 (byte, short, int, long)의 피연산자에만 사용됨

    - 산출 타입은 int 타입

 

4. 이항 연산자

산술 연산자 (+, -, *, /, %)

    - 사칙연산 +, -, *, / 와 나머지를 구하는 연산자 %

    - boolean 타입을 제외한 모든 기본 타입에 사용 가능

    - long을 제외한 정수 타입 연산은 int 타입으로 산출되고, 피연산자 중 하나라도 실수 타입이면 실수 타입으로 산출됨

    - 리터럴 간의 연산은 타입 변환 없이 해당 타입으로 계산

    - 오버플로우 : 연산 후의 산출값이 산출 타입의 범위를 넘어가면 오버플로우가 발생하고 쓰레기 값이 저장됨 > 메소드와 예외 처리를 사용해 미리 오버플로우를 감지하는 것이 필요함

    - 정확한 값을 산출해야 할 경우 정수 타입으로 계산

    - Infinity : 어떠한 수를 0.0 또는 0.0f로 나눌때 발생 / Double.isInfinite() : 매개값이 Infinity 이면 true, 아니면 false 리턴

    - NaN (Not a Number) : 어떠한 수를 0.0 또는 0.0f로 나머지를 구할때 발생 / Double.isNaN() : 매개값이 NaN이면 true, 아니면 false 리턴

    - 사용자에게 실수를 입력받을 때는 반드시 NaN 검사

 

문자열 연결 연산자 (+)

    - 문자열을 서로 결합하는 연산자

public class Example {
	public static void main (String[] args) {
    	String str1 = "JDK" + 6.0;
        String str2 = str1 + " 특징";
        System.out.println(str2);		// JDK6.0 특징
        
        String str3 = "JDK" + 3 + 3.0;
        String str4 = 3 + 3.0 + "JDK";
        System.out.println(str3);		// JDK33.0
        System.out.println(str4);		// 6.0JDK
    }
}

비교 연산자 (<, <=, >, >=, ==, !=)

    - 대소 또는 동등을 비교하여 boolean 타입인 true나 false 산출

    - 대소 연산자는 boolean 타입을 제외한 기본 타입에 사용 가능하고 비교 연산자는 모든 타입에 사용 가능

    - 비교 연산자는 흐름 제어문인 조건문, 반복문에서 주로 이용되어 실행 흐름을 제어할 때 사용됨

    - 피연산자가 char 타입이면 유니코드 값으로 비교 연산을 수행

    - 연산 수행 전 타입 변환을 통해 피연산자의 타입을 일치시킴

'A' == 65	// true
0.1 == 0.1f // false, 0.1f가 같은 근사값으로 표현되기 때문

    - String 타입의 문자열을 비교할 때에는 equals() 메소드 사용 / 비교 연산자는 변수에 저장된 값만 비교

String str1 = "오즈";
String str2 = "오즈";
String str3 = new String("오즈");

str1 == str2			// true
str2 == str3			// false

str1.eqauls(str2)		// true
str2.eqauls(str3)		// true

 

논리 연산자 (&&, ||, &, |, ^, !)

    - 논리곱 (&&), 논리합 (||), 배타적 논리합 (^), 논리 부정 (!) 연산

    - &와 | 연산자는 두 피연산자 모두를 평가하지만 && 연산자는 앞 피연산자가 false라면 false를 산출하고 || 연산자는 앞 피연산자가 true라면 true를 산출함

 

비트 연산자 (&, |, ^, ~, <<, >>, >>>)

    - 0과 1로 표현 가능한 정수 타입만 비트 연산 가능

    - 피연산자를 int 타입으로 자동 타입 변환 후 연산 수행

    - 비트 논리 연산자 (&, |, ^, ~) : 논리곱 (AND, &), 논리합 (OR, |), 배타적 논리합 (XOR, ^), 논리 부정 (NOT, ~)

    - 비트 이동 연산자 (<<, >>, >>>) : 정수 데이터의 비트를 좌측 또는 우측으로 밀어서 이동시키는 쉬프트 연산을 수행

 

대입 연산자 (=, +=, -=, *=, /=, %=, &=, ^=, |=, <<=, >>=, >>>=)

    - 오른쪽 피연산자의 값을 좌측 피연산자인 변수에 저장

    - 오른쪽 피연산자는 리터럴 및 변수, 다른 연산식이 올 수 있음

    - 단순 대입 연산자와 복합 대입 연산자로 나뉨

    - 모든 연산자들 중 가장 낮은 연산 순위를 가지고 있기 때문에 제일 마지막에 수행됨

 

5. 삼항 연산자 (? :)

세 개의 피연산자를 필요로 하는 연산자

? 앞의 조건식에 따라 콜론 (:) 앞뒤의 피연산자가 선택됨

조건식 ? 값 또는 연산식 : 값 또는 연산식
(피연산자1) (피연산자2) (피연산자3)

조건식의 결과가 true이면 삼항 연산자의 결과는 피연산자2, 조건식의 결과가 false이면 삼항 연산자의 결과는 피연산자3

 

 

반응형

'언어 > Java' 카테고리의 다른 글

클래스  (2) 2023.08.23
참조 타입  (0) 2023.08.21
조건문과 반복문  (0) 2023.08.20
변수와 타입  (0) 2023.08.18
자바 시작  (0) 2023.08.17