2023년 1월 1일
08:00 AM
Buffering ...

최근 글 👑

20240725_캠프 2주차 4일_연산자

2024. 7. 25. 17:04ㆍ내배캠_Java 6기/Java 문법 종합반


연산자 

연산자는 변수들을 계산하기 위해서 사용한다.

 

✅  연산자 : 계산할 때 계산할 목적이 되는 것 . 덧셈, 뺄셈 기호처럼 계산할 기호 ( +, - )

 

✅  피연산자 : 연산자로 계산되는 숫자 및 변수

 

 

연산자의 종류 

산술연산자 : +, -, *, /, %(나머지), <<, >> (비트 연산)

 

비교연산자 : >, <, >=, <=, ==, !=


논리연산자 : &&, ||, !


대입연산자 : =, ++, --


기타연산자 : (type), ? :, instance of

 

 

간단한 산술 연산 진행해보기 

산술연산자 : +, -, *, /, %(나머지), <<, >> (비트 연산)

 

1. 변수에 값을 할당한다.

2. 변수 x와 y를 더한 값을 z에 할당한다. x, y는 피연산자가 되고 '+' 는 연산자가 된다. 

3. z를 System.out.println 으로 출력한다. 

package week02_Middle;

// 간단한 산술 연산을 진행해보기
public class BasicAdd {
    public static void main(String[] args) {
        // x + y = z

        // 1. 값을 할당한다
        int x = 5;
        int y = 10;

        // 2. x 와 y룰 더한 값을 z에 할당한다
        int z = x + y;  // x, y -> 피연산자 / + -> 연산자


        // System printout 은 메인 메소드 안에서 선언이 가능
        System.out.println(z);
    }
}

 

산술 연산자로 사칙 연산 진행하기 

사칙연산 : + (더하기), - (빼기), * (곱), / ( 나누기), % (나눗셈 나머지) 

 

규칙

 

1. 더하기와 곱하기가 있으면 곱하기를 먼저 계산 -> 중학교 시간 

2. 괄호가 있으면 괄호부터 계산 

 

package week02_Middle;

public class Calculator {
    public static void main(String[] args) {
        // 사직연산 : +, -, *, /, %

        System.out.println(4+2); // 6
        System.out.println(4-2); // 2
        System.out.println(4*2); // 8
        System.out.println(4/2); // 2
        System.out.println(5/2); // 2
        System.out.println(2/4); // 0
        System.out.println(4%2); // 0
        System.out.println(5%2); // 1
        System.out.println("------------------");

        // 우선순위 연산
        System.out.println(2 + 2 * 2); // 6. 중학교 시간 ㅋㅋ 더하기와 곱하기가 있으면 곱하기를 먼저 계산
        System.out.println((2 + 2) * 2); // 8. 괄호가 있으면 괄호부터 계산
        System.out.println("------------------");

        // 변수를 이용한 연산

        // 변수 선언
        int a = 20;
        int b = 10;
        int c;

        // 덧셈
        c = a + b;
        System.out.println(c); // 20 + 10 = 30

        // 뺄셈
        c= a - b;
        System.out.println(c); // 20 - 10 = 10

        // 곱셈
        c= a * b;
        System.out.println(c); // 20 * 10 = 200

        // 나눗셈(몫)
        c= a / b;
        System.out.println(c); // 20 / 10 = 2

        // 나머지
        c= a % b;
        System.out.println(c); // 20 % 10 = 0
    }
}

 

 

비교 연산자 

비교연산자 :  > (크다), < (작다), >= (크거나 같다), , <= (작거나 같다), , == (같다), , != (같지 않다)

 

✅ 좌측과 우측을 비교한다고 해서 비교 연산자 

 

✅ 비교 연산자의 반환값은 true(참) / 거짓(false) 가 나온다. 

 

package week02_Middle;

public class ComparisonOperator {

    // 비교연산자 : 좌측과 우측을 비교한다고 해서 비교연산자
    // 비교연산자의 반환값이 true/false 가 나온다가 중요

    public static void main(String[] args) {
        System.out.println(10>9); // 10이 9보다 크다 -> 참 true
        System.out.println(10>=9); // 10이 9보다 크거나 같다 -> 참 true
        System.out.println(10<9); // 10이 9보다 작다 -> 거짓 false
        System.out.println(10<=9); // 10이 9보다 작거나 같다 -> 거짓 false
        System.out.println(10==10); // 10이 10과 같다 -> 참 true
        System.out.println(10==9); // 10이 9와 같다 -> 거짓 false
        System.out.println(10!=10); // 10이 10과 같지 않다  -> 거짓 false
        System.out.println(10!=9); // 10이 9와 같지 않다  -> 참 true
    }
}

 

 

논리 연산자 

논리 연산자 : && (AND), || (OR), ! (NOT → 값을 반대로 바꿔줌. true →  false,  false →  true)


✅ 비교 연산의 결과값으로 받을 수 있는 boolean(true, false) 값을 연결하는 연산자 

 

✅ 조건을 연결하였을 때 boolean 값을 조합해서 참,  거짓 boolean 값을 출력 

 

package week02_Middle;

public class LogicOperator {
    // 논리연산자
    // 비교 연산의 결과값으로 받을 수 있는 boolean 값을 연결하는 연산자
    // 조건을 연결하였을 때 boolean 값을 조합ㅎ서 참, 거짓 boolean 값을 출렭
    // &&(AND), ||(OR). !(NOT -> 값을 반대로 바꿔줌)

    public static void main(String[] args) {
        boolean flag1 = true;
        boolean flag2 = true;
        boolean flag3 = false;

        System.out.println(flag1);
        System.out.println(flag2);
        System.out.println(flag3);

        // 1. 피 연산자 중 하나라도 true이면 true이다 => 또는 => || OR
        System.out.println("------------------");
        System.out.println(flag1 || flag2); // true || true = true
        System.out.println(flag1 || flag2 || flag3); // true || true || false = true

        // 2. 피 연산자가 모두 true이면 true이다 => 그리고 => && AND
        System.out.println("------------------");
        System.out.println(flag1 && flag2); ; // true && true = true
        System.out.println(flag1 && flag2 && flag3); // true && true && false = false

        // 3. && AND
        System.out.println("AND-----------------");
        System.out.println((5 > 3) && (3 > 1)); // true && true = true
        System.out.println((5 > 3) && (3 < 1)); // true && false = false

        // 4. || OR
        System.out.println("OR-----------------");
        System.out.println((5 > 3) || (3 > 1)); // true || true = true
        System.out.println((5 > 3) || (3 < 1)); // true || false = true


        // 5. 논리 부정 연산자 ! NOT
        System.out.println("! NOT-----------------");
        System.out.println(!flag1); // !true  = false
        System.out.println(!flag3); // !false = true
    }
}

 

 

대입 연산자 

대입 연산자 : =(기본연산자), +=, -=, *= ....(복합 대입 연산자)

✅ 변수를 바로 연산해서 바로 값을 할당해 저장하는 연산자

 

✅ 복합 대입 연산자는 기본 대입 연산자를 줄여서 작성한 것이여서 기능은 똑같다 

 

 

대입 연산자 주의점

 

++, -- a : a + 1, a - 1. 연산 전에 피연산자에 1을 더해주고 연산 

a ++, -- : 연산 후에 피연산자에 1을 더해준다. 

 

int a = 10;
int b = 10;
int val = ++a + b--;

System.out.println(val);

++a => a + 1 = 11
b-- => (++a + b) + 1 => (11 + 10) + 1 = 21     

 

 

대입 연산자 사용법

package week02_Middle;

public class AssignmentOperator {
    public static void main(String[] args) {
        // 대입연산자
        // 변수를 바로 연산해서 그 자리에서 대입하는 연산자
        // =(기본연산자), +=, -=, *= ....(복합대입연산자)
        // ++ : += 1
        // -- : -= 1

        // 기본 대입 연산자
        int number = 10;
        number = number + 10; // 10 + 10 = 20
        System.out.println(number);

        // 복합 대입 연산자
        System.out.println("-----------------");
        number = 10;

        number += 2;
        System.out.println(number); // number + 2 = 12

        number -= 2;
        System.out.println(number); // number - 2 = 10

        number *= 2;
        System.out.println(number); // number * 2 = 20

        number /= 2;
        System.out.println(number); // number / 2 = 10

        number %= 2;
        System.out.println(number); // number % 2 = 0 나눗셈의 나머지

        // ++, --
        // number = number + 1;
        // number += 1;
        // number++;

        System.out.println("-----------------");
        number++;
        System.out.println(number); // 0 + 1 = 1

        number--;
        System.out.println(number); // 1 - 1 = 0

        // 대입연산자에서 주의해야 할점

        System.out.println("-----------------");
        int a = 10;
        int b = 10;
        int val = ++a + b--;
        System.out.println(val);

        // ++a => a + 1 = 11
        // b-- => (++a + b) + 1 => (11 + 10) + 1 = 21

    }
}

 

기타 연산자 

 1. 형변환 연산자

int intNumber = 93 + (int)98.8; // 93 + 98 = 191
System.out.println(intNumber);

double doubleNumber = (double) 93 + 98.8;; // 93.0 + 98.8 = 191.8
System.out.println(doubleNumber);

 


 2. 삼항연산자 :  비교 연산자와 함께 쓰이며 비교 연산자의 결과 true / false 로 결정

// 2. 삼항연산자
// 비교연산자와 항상 함께 쓰이며 비교연산자의 결과 true/false로 결정되는 것
int x = 1;
int y = 9;

boolean b = (x == y) ? true : false; // x와 y가 같다면 true, 아니면 false => false
System.out.println(b);

 

 

 3. instance of 

 

 아직까지 자세히 다루지 않음. 클래스, 객체의 개념을 알아야 알 수 있음. 
 피 연산자가 조건에 명시된 클래스의 객체인지 비교하여 맞으면 true, 아니면 false

 

 

연산자 우선순위

연산자 우선순위 : 산술 > 비교 > 논리 > 대입


연산자 여러 개가 함께 있는 연산을 계산할 때는 우선순위가 있어서 우선순위에 따라서 응답값이 결정된다
단, 괄호로 감씨주면 괄호 안 연산이 최우선순위로 계산된다.

 

package week02_Middle;

public class Priority {
    public static void main(String[] args) {
        // 연산자 우선순위 : 산술 > 비교 > 논리 > 대입
        // - 연산자 여러 개가 함께 있는 연산을 계산할 때는 우선순위가 있다
        // 위 우선순위에 따라서 최종적인 응답값이 결정된다
        // 단, 괄호로 감싸주면 괄호 안 연산이 최우선순위로 계산된다

        int x = 2;
        int y = 9;
        int z = 10;

        boolean result = x < y && y < z; // 비교 연산자 먼저 계산되고 && 논리 계산됨
        System.out.println(result); // 2 < 9 -> true, 9 < 10 -> true. true && true = true

        System.out.println("-----------------");

        // 1. 산술 계산 x + 10 = 12
        // 2. 비교 연산 :  12 < 9 && 9 < 10
        // 3. 논리 연산 : false && true = false
        result = x + 10 < y && y < z;
        System.out.println(result);

        System.out.println("-----------------");
        result = (x + 2) * 3 > y; // 괄호먼저 계산 -> * 계산 -> 비교연산 계산
        System.out.println(result); // x + 2 = 4 -> 4 * 3 = 12 -> 12 > 9 -> true\


    }
}

 

 

 

산술 변환

산술 변환 : 연산 전에 피연산자의 타입을 일치시키는 것

두 피연산자의 타입을 같게 일치시킨다. (둘중에 저장공간 크기가 더 큰 타입으로 일치)

피연산자의 타입이 `int` 보다 작은 `short` 타입이면 `int`로 변환
피연산자의 타입이 `long` 보다 작은 `int`, `short` 타입이면 `Long`으로 변환
피연산자의 타입이 `float`보다 작은 `long`, `int`, `short` 타입이면 `float`으로 변환
피연산자의 타입이 `double` 보다 작은 `float`, `long`, `int`, `short` 타입이면 `double`으로 변환

 

 

이처럼, 변수 여러 개를 연산했을 때 결괏값은 피연산자 중 범위가 가장 큰 변수 타입을 가지게 된다.

 


비트 연산
1byte = 8bit


Bit는 0,1 둘 중의 하나의 값만을 저장하는 컴퓨터가 저장(표현) 가능한 가장 작은 단위여서 가장 연산이 빠르다. 

물론 이전에 배운 대로 0,1 값으로 산술연산을 하거나, 비교 연산을 할 수 있지만 비트 연산을 통해 자릿수를 옮길 수도 있다. 


이처럼 Bit의 자릿수를 옮기는 것을 비트 연산!!
 `<<`(왼쪽으로 자릿수옮기기), `>>`(오른쪽으로 자릿수옮기기)


 0,1 은 2진수 값이기 때문에,
 자릿수를 왼쪽으로 옮기는 횟수만큼 2의 배수로 곱셈이 연산되는 것과 동일.
 자릿수를 오른쪽으로 옮기는 횟수만큼 2의 배수로 나눗셈이 연산되는 것과 동일.

 

 

⭐ 느낀점과 다음 할 일 

아직까지는 100% 이해할 수 있는 내용이라 다시 차근히 이해하고 머리에 새길 수 있어서 좋았다.

앞으로 조건문, 반복문, 배열 등이 나오면 더 자바의 핵심으로 들어가는 것이기 때문에

100% 이해하고 개념을 새길 수 있도록 해야겠다.

728x90