본문 바로가기
JAVA/이재환의 자바 프로그래밍 입문

[Java] Ch. 4 연산자

by ♡˖GYURI˖♡ 2023. 10. 13.
728x90

산술 연산자

자바 산술 연산자

연산자 설명 사용 예 결과
+ 더하기 5 + 2 7
- 빼기 5 - 2 3
* 곱하기 5 * 2 10
/ 나누기의 몫 5 / 2 2
% 나누기의 나머지 5 % 2 1
public class Ex01_Arithmetic
{
    public static void main(String[] args)
    {
        int num1 = 7;
        int num2 = 3;
        
        System.out.println("num1 + num2 = " + (num1 + num2));
        System.out.println("num1 - num2 = " + (num1 - num2));        
        System.out.println("num1 * num2 = " + (num1 * num2));
        System.out.println("num1 / num2 = " + (num1 / num2));
        System.out.println("num1 % num2 = " + (num1 % num2));
    }
}

 

 

대입 연산자와 복합 대입 연산자

대입 연산자

int num = 100;
int myScore = 50 + 20;

 

복합 대입 연산자

연산자 설명
a += b a = a + b
a -= b a = a - b
a *= b a = a * b
a /= b a = a / b
a %= b a = a % b
public class Ex02_Assignment
{
    public static void main(String[] args)
    {
        short num = 10;
        num += 77L;                  // 사람의 강제 형 변환 필요하지 않음
        System.out.println(num);

        num = (short)(num + 77L);    // 형 변환 필요
        System.out.println(num);
    }
}

 

 

부호 연산자와 증감 연산자

연산자 사용 예 설명
+ +x 부호 유지 (의미 없는 연산)
- -x 부호 반전
++ ++x 다른 연산 전 x 값을 증가시킴
x++ 다른 연산 후 x 값을 증가시킴
-- --x 다른 연산 전 x 값을 감소시킴
xx-- 다른 연산 후 x 값을 감소시킴
public class Ex03_PlusMinusSign
{
    public static void main(String[] args)
    {
        short num1 = 5;
        System.out.println(+num1);      // 결과적으로 불필요한 +연산
        System.out.println(-num1);      // 부호를 바꿔서 얻은 결과를 출력
        System.out.println(num1);       // num1 의 값은 변하지 않음
        
        short num2 = 7;
        short num3 = (short)(+num2);    // (1) 형 변환 하지 않으면 오류 발생 
        short num4 = (short)(-num2);    // (2) 형 변환 하지 않으면 오류 발생
        System.out.println(num3);
        System.out.println(num4);    
    }
}

(1), (2) : int로 형변환이 됨

 

public class Ex04_PrefixPostfix
{
    public static void main(String[] args)
    {
        int num = 10;
        System.out.println(++num);  // num의 값 하나 증가 후 출력 
        System.out.println(num);    // num의 값이 증가되어 있음    

        System.out.println(num++);  // 출력 후에 값이 증가 
        System.out.println(num);    // 출력 후에 값이 증가
    }
}

(증감연산자는 반복문에서 단독으로 사용하는 것이 좋음)

 

 

비교 연산자 (관계 연산자)

int x = 2;
int y = 1;
연산자 사용 예 설명 결과
== x == y x와 y는 같다 false
!= x != y x와 y는 같지 않다 true
> x > y x가 y보다 크다 true
>= x >= y x가 y보다 크거나 같다 true
< x < y x가 y보다 작다 false
<= x <= y x가 y보다 작거나 같다 false
public class Ex05_Compare
{
	public static void main(String[] args)
	{
        System.out.println("2 >= 1 : " + (2 >= 1));
        System.out.println("2 <= 1 : " + (2 <= 1));

        // 비교 연산시에도 형 변환이 일어남
        System.out.println("1.0 == 1 : " + (1.0 == 1));
        System.out.println("1.0 != 1 : " + (1.0 != 1));
	}
}

1.0과 1은 실수와 정수인데 결과값이 출력됨

→ 실수형으로 자동 형변환이 이뤄진 다음 비교 연산을 수행했기 때문

 

 

논리 연산자

  • 두 명제가 모두 참이면 논리곱은 참
  • 두 명제 중 하나라도 참이면 논리합은 참
  • 참의 부정은 거짓, 거짓의 부정은 참
연산자 기능
&&
(논리곱, And)
두 항이 모두 참이면 결괏값은 참
그렇지 않은 경우 거짓
||
(논리합, Or)
두 항 중 하나의 항이라도 참이면 결괏값은 참
두 항이 모두 거짓이면 결괏값은 거짓
!
(부정, Not)
값이 참인 경우는 거짓으로 바꿈
값이 거짓인 경우는 참으로 바꿈
A B A && B A || B !A
true true true true false
true false false true false
false true false true true
false false false false true
public class Ex06_Logical
{
    public static void main(String[] args)
    {
        int num1 = 11;
        int num2 = 22;
        boolean result;

        result = (num1 > 1) && (num1 < 10);
        System.out.println("1 초과 10 미만인가? " + result);

        result = ((num2 % 2) == 0) || ((num2 % 3) == 0);
        System.out.println("2 또는 3의 배수인가? " + result);
    }
}

 

 

논리 연산자 주의점

Short-Circuit Evaluation (최단 거리 평가, SCE)

: 연산의 효율 및 속도의 향상을 위해 불필요하 연산을 수행하지 않는 기능

public class Ex07_ShortCircuitEvaluation
{
    public static void main(String[] args)
    {
        int x = 0; 
        int y = 0;
        boolean result;
        
        result = ((x = x + 1) < 0) && ((y = y + 1) > 0);

        System.out.println("result = " + result);
        System.out.println("x = " + x);
        System.out.println("y = " + y + '\n');
        
        result = ((x = x + 1) > 0) || ((y = y + 1) > 0);
        
        System.out.println("result = " + result);
        System.out.println("x = " + x);
        System.out.println("y = " + y);
    }
}

 

 

조건 연산자

조건식 ? 참일 때 실행 : 거짓일 때 실행;
int myclass = (age>20) ? 2 : 1;
public class Ex08_Condition
{
    public static void main(String[] args)
    {
        int num1 = 50;
        int num2 = 100;
        
        int big = (num1 > num2) ? num1 : num2;
        System.out.println("큰 수 : " + big);
        
        int diff = (num1 > num2) ? (num1 - num2) : (num2 - num1);
        System.out.println("두 수의 차 : " + diff);
    }
}

 

단항·이항·삼항 연산자

  • 단항 연산자 : ++x, y--에서 ++, --는 하나의 피연산자만으로 이루어진 식으로 연산을 수행
  • 이항 연산자 : x + y에서 + 연산자는 피연산자를 두 개 가지고 식을 구성
  • 삼항 연산자 : 항이 세 개 있어야 함 (조건 연산자)
1항 ? 2항 : 3항;

 

연산자 우선순위

우선순위 종류 연산자
1   .  []  ()
2 단항 ++  --  !  +  -
3 산술 *  /  %
4 산술 +  -
5 비교 <  <=  >  >=
6 관계 ==  !=
7 논리곱 &&
8 논리합 ||
9 조건 booleanExpression ? exp1 : exp2
10 대입 =  +=  -=  *=  /=  %=
public class Ex09_Order
{
    public static void main(String[] args)
    {
        System.out.println();            // println을 이용한 줄바꿈
        System.out.print("\n");          // 특수 문자를 이용한 줄바꿈
        System.out.println("--------------------");

        int num = 5;

        System.out.print(num + '\n');    // (1) 기본 자료형끼리는 산술 연산
        System.out.println("--------------------");
        System.out.print(num + "\n");

        System.out.println("3 >= 2 : " + (3 >= 2));
        //System.out.println("3 >= 2 : " + 3 >= 2);
    }
}

(1) '\n'은 문자형(기본 자료형)으로 아스키코드 10에 해당 ("\n"은 스트링 객체, 글자들 → 산술 연산 불가능)