본문 바로가기
Backend/Java

Java 기초 문법 : 연산자

by 코딩쥐 2024. 5. 10.

연산자는 변수와 값의 연산을 위해 쓰이는 기호들을 이야기한다. 연산 수행 시에 우선 순위가 같은 연산자가 있을 때는 앞에 있는 것을 먼저 계산한다(단항 연산자, 대입 연산자 제외). 만약 수동으로 연산 수행 순서를 결정하고 싶을 때는 괄호를 사용한다. 

종류 연산자 우선순위 결합규칙
단항 연산자 ++, --, +, -, ~, !, (type) 높음









낮음 
산술 연산자 *, /, %, +, -, <<, >> 
비교 연산자 <, >,  <=, >=, instanceof,  ==, !=
논리 연산자 &, ^, | , &&, || 
삼항 연산자 ?:
대입 연산자 =, +=, -=,  *=,  /=, %=, <<=, >>=, &=, ^=, |=

 

산술 연산자

더하기, 빼기, 곱하기, 나누기, 나머지 다섯개의 연산을 의미한다. 산술 연산 시 두 피연산자의 타입이 일치해야 연산이 가능하기 때문에 연산 전에 형변환 연산자로 타입을 일치시켜야한다. 큰 타입으로 두 연산자의 타입을 같게 일치시킨 후에 연산을 수행한다. int형보다 크기가 작은 자료형(byte, short, char)은 int형으로 변환되어 연산을 한다. 문자의 경우 유니코드로 변경된다.

  • 저장범위 : byte -> short / char -> int -> long -> float -> double
public class Test {
public static void main(String[] args) {

	int a = 10;
	int b = 4;

    System.out.printf("%d + %d = %d%n", a, b, a + b);
    System.out.printf("%d - %d = %d%n", a, b, a - b);
    System.out.printf("%d * %d = %d%n", a, b, a * b);
    System.out.printf("%d / %d = %d%n", a, b, a / b);
    System.out.printf("%d / %f = %f%n", a, (float)b, a / (float)b);
    
    int x = 10;
    int y = 8;

    System.out.printf("%d을 %d로 나누면, %n", x, y);
    System.out.printf("몫은 %d이고, 나머지는 %d입니다.", x / y, x % y);

}
}

// 10 + 4 = 14
// 10 - 4 = 6
// 10 * 4 = 40
// 10 / 4 = 2
// 10 / 4.000000 = 2.500000 : a나 b를 float으로 변경해야 float으로 자동변환되어 소수점 답 나옴

// 10을 8로 나누면,
// 몫은 1이고, 나머지는 2입니다.

 

증감연산자

증감연산자(++)는 피연산자의 값을 1 증가시키고, 감소연산자(--)는 피연산자의 값을 1 감소시킨다.

int i=5, j=0; 
j=++i;
System.out.println("j=" + j + ",i=" + i); // j=6, i=6, 전위형(값이 참조되기 전 증가)

int i=5, j=0;
j=i++;
System.out.println("j=" + j + ",i=" + i);  // j=5, i=6, 후위형 (값이 참조된 후 증가)

 

단항 연산자

부호연산자

부호연산자(+,-) 중 '-'는 피연산자의 부호를 반대로 변경한다. boolean형과 char형 제외한 기본형에만 사용한다. 

int i = -10;
i = -i;
System.out.println(i); // 10

 

형변환 연산자 ((type)피연산자)

변수 또는 상수 타입을 다른 타입으로 변환한다. 형변환은 데이터 손실이 발생할 수 있다.

double d = 85.4; 
int score = (int)d;
System.out.println(score); // 85, double 타입을 int로 변환

 

 

비교 연산자

두 개의 리터럴을 비교하는데 사용되는 연산자로 true/false 결과를 도출한다. 비교하는 피연산자의 자료형이 서로 다를 경우에는 자료형이 큰 쪽으로 형변환하여 피연산자의 타입을 일치시킨 후에 비교한다. 

연산자 설명
>, < 좌변 값이 클 경우 true, 좌변 값이 작을 경우 true
>=, <= 좌변 값이 크거나 같으면 true, 좌변 값이 작거나 같으면 true
== 두 값이 같으면 true
!= 두 값이 다르면 true
System.out.println(3>2); // true
System.out.println(5<4); // false
System.out.println(5 != 4); //true

 

논리 연산자

논리형 값과의 연산 결과를 출력하는 연산자이다.

연산자 설명
비트연산자


& 피연산자 양쪽이 모두 1이면 1, 그 외 0 (AND)
^ 피연산자의 값이 서로 다를때만 1, 같으면 0  (XOR)
| 피연산자 중 한 쪽의 값이 1이면 1 , 그 외 0 (OR)
~ 0은 1로, 1은 0으로 전환한다.
<< (왼쪽 쉬프트) 이진수를 왼쪽으로 이동시킨다.
>> (오른쪽 쉬프트) 이진수를 오른쪽으로 이동시킨다.
&& 두 값이 모두 true일 때 true
|| 두 값 중에 한쪽이 true면 true
! 피연산자가 true면 false를, false면 true를 결과로 반환한다.
        System.out.println(true && true); // true
        System.out.println(true && false); //false
        System.out.println(false && false); //false
        System.out.println( true || false ); //true
        System.out.println( false || false); //false
        System.out.println((!false)); //true

// 논리연산자는 양 변에 있는 애들은 boolean이거나 수식을 넣은 결과값이 true/false 였을때 사용할 수 있다.
        System.out.println((1+2>4) || (5<3)); // false

 

 

쉬프트 연산자(<<,>>)

2진수로 표현했을 때 오른쪽(>>), 왼쪽(<<)으로 이동시킨다. 왼쪽(<<)의 경우 2^n를 곱하는 효과가 있고, 오른쪽(>>)의 경우 2^n를 나누는 효과가 있다.

    • 1. 8을 2진수로 표현 : 000010002. 8 << 2 : 00100000  (왼쪽으로 2자리 이동) 
      3. 10진수로 표현 : 32 (8 곱하기 2^2 하는 효과가 있다.)

 

삼항 연산자

논리값을 통해 선택적으로 값을 가져올 수 있는 연산자이다. 참과 거짓의 타입이 동일하거나 다르더라도 자동 형변환이 가능해야 한다. 

  • 조건식 ? 참일 때의 값 : 거짓일 때의 값
public class Test {  
    public static void main(String[] args) {  
    	int x = 1;
    	int y = 5;
    	
    	int result = (x>y)? x: y;
    	System.out.println("result:"+result);
    }  
   }  
   
   // result:5, 위의 결과가 false이기 때문에 result에 y를 대입함

 

 

대입 연산자

오른쪽 피연산자(rvalue)를 왼쪽 피연산자(lvalue)에 저장한다. 왼쪽에서 오른쪽으로 연산하는 연산자로 모든 연산자 중에 가장 나중에 연산된다. 

 

대입 산술연산자

불필요한 연산자를 없애기 위해 간략하게 표현한 연산자이다. 

op= =
i += 3; i = i + 3;
i -= 3; i = i - 3;
i *= 3; i = i * 3;
i /= 3; i = i / 3;
i %= 3; i = i % 3;
i <<= 3; i = i << 3;
i >> = 3; i = i >> 3;
i &= 3; i = i & 3;
i ^= 3; i = i ^ 3; 
i |= 3; i = i | 3;
i *= (10+j); i = i * (10 + j);