Java : Operator(연산자) 2

2023. 3. 17. 10:43java


public class File01_Operator {
    public static void main(String[] args) {
        // 대입 연산자, 복합 대입 연산자
        //  - 대입 연산자 : 변수에 데이터 또는 표현식의 결과 값을 저장하는 연산자
        //  - 복합 대입 연산자 : 다른 연산자와 대입 연산자를 동시에 수행하는 연산자
        //      → 다른 연산자의 좌측 변수와 대입 연산자의 좌측 변수가
        //        동일한 변수인 경우 복합 대입 연산자로 표현할 수 있다.
        //      → 변수의 값을 특정 연산을 통해 새로운 결과 값으로 저장할 때 사용
        //          +=, -=, *=, /=, %=, &=, |=
       
        // 변수 a 에 10 을 대입
        int a = 10;
       
        System.out.println("a = " + a);
        // a 의 값을 10 만큼 더한다.
        a = a + 10;
        // a = 10 + 10;
        // a = 20;
        System.out.println("a = " + a);
       
        // a 의 값을 10 만큼 더한다.
        a += 10;
        System.out.println("a = " + a);
        System.out.println("-----------------------------------------------------");
        //---------------------------------------------------------------------------
        // 증감 연산자
        //  변수에 저장된 값을 1 증가 또는 감소시키는 연산자
        //  변수만 지정하면 되기 때문에 단항 연산자
        //      ++(1 증가), --(1 감소)
        //  연산자의 작성 위치에 따라 전위 증감, 후위 증감으로 나뉜다
        //   전위 증감 : 변수 앞에 작성되며, 증가된 값을 반환
        //   후위 증감 : 변수 뒤에 작성되며, 증가되지 건의 값을 반환
        int b = 0;
        int c = 0;
        System.out.println("before");
        System.out.println("b = " + b);
        System.out.println("c = " + c);
        int prefix = ++b; // 변수 b 의 값을 1 증가, 증가된 값을 반환
        int postfix = c++; // 변수 c 의 값을 1 증가, 증가되기 전의 값을 반환
        System.out.println("after");
        System.out.println("++b = " + prefix);
        System.out.println("c++ = " + postfix);    
        System.out.println("b = " + b);
        System.out.println("c = " + c);
       
        System.out.println("(++b) * 2 = " + (++b) * 2 );
        // System.out.println("(++b) * 2 = " + (2) * 2 );
        // System.out.println("(++b) * 2 = " + 4 );
        System.out.println("(c++) * 2 = " + (c++) * 2 );
        // System.out.println("(c++) * 2 = " + 1 * 2 );
        // System.out.println("(c++) * 2 = " + 2 );
       
       
        System.out.println("-----------------------------------------------------");
        //---------------------------------------------------------------------------
        // 비교 연산자(관계 연산자)
        //  두 숫자 값의 크기를 비교하는 연산자
        //  비교 연산자의 결과 값은 true, false 이다.
        //  >, <, <=, >=, ==, !=
        //  프로그램의 흐름을 제어하기 위한 제어문에서 조건식을 만들 때 사용된다.
        //   조건식 : 조건을 표현하기 위한 식
        //           ex) 점수가 80 점 이상인가? , 나이가 20살 인가?
        int d = 10;
       
        // d 가 10 보다 크다. d 가 10 초과
        System.out.println(d +" > 10 : " + (d > 10));
        // d 가 10 보다 크거나 같다. d 가 10 이상
        System.out.println(d + ">= 10 : " + (d >= 10));
        // d 가 10 보다 작다. d 가 10 미만
        System.out.println(d + "< 10 : " + (d < 10));
        // d 가 10 보다 작거나 같다. d 가 10 이하
        System.out.println(d + "<= 10 : " + (d <= 10));
        // d 가 10과 같다.
        System.out.println(d+ "== 10 : " + (d == 10));
        // d 가 10과 다르다.
        System.out.println(d+ "!= 10 : " + (d != 10));
       
        // 비교 연산자로는 범위를 표현할 수 없다.
        //  0 이상 100 미만의 d
        // System.out.println("10 <= " + d + " < 100 : " + (0 <= d < 100));
        //  → 문법 오류
        //  → Java 에서는 다수의 연산자를 동시에 수행하지 않기 때문에
        //    연산자에 맞지 않는 타입이 오는 것을 컴파일러가 감지
        //  → (0 <= d < 100) → (true < 100) → 비교 연산자는 논리 값을 비교할 수 없다.
       
       
        System.out.println("-----------------------------------------------------");
        //---------------------------------------------------------------------------
        // 논리 연산자
        //  - 논리 값을 연산하기 위한 연산자
        //  - 연산자의 결과 값 또한 논리 값이다.
        //  - 두 개 이상의 비교 연산을 통한 값을 하나의 값으로 연산
        //      &&, ||, !
       
        int e = 10;
        // && 연산자, AND 연산자
        //  A 이고 B, A 와 B 를 모두 만족해야한다.
        // e 가 0 이상이고 10 미만이다.
        //  → 0 <= e < 10   표현 불가능
        System.out.println("e 가 0 이상이고 10 미만이다. " + ((e >= 0) && (e < 10)));
        // System.out.println("e 가 0 이상이고 10 미만이다. " + ((true) && (false)));
        // System.out.println("e 가 0 이상이고 10 미만이다. " + (false));
       
        // || 연산자, OR 연산자
        //  A 또는 B, A 와 B 중 하나라도 만족해야한다.
        // e 가 0 이하이거나 10 이상이다.
        System.out.println("e 가 0 이하이거나 10 이상이다. " + ((e <= 0) || (e >= 10)));
        // System.out.println("e 가 0 이하이거나 10 이상이다. " + ((false) || (true)));
        // System.out.println("e 가 0 이하이거나 10 이상이다. " + (true));
       
        // ! 연산자, NOT 연산자
        //  A 가 아니다. A의 반대 값
        //  이미 구해진 논리 값의 반대 값을 이용해야하는 경우
        //  드모르간의 법칙을 이용하는 경우
       
        // e 가 짝수가 아니다.
        System.out.println("e 가 홀수다. " + !(e % 2 == 0));
       
        System.out.println("-----------------------------------------------------");
        //---------------------------------------------------------------------------
        // 조건 연산자
        //  - 조건에 따른 특정 값을 지정하여 지정된 값을 반환시키는 연산자
        //  - 조건 : 비교 연산자 또는 논리 연산자로 표현된 식
        //      조건식 ? true 일 때의 표현식 : false 일 때의 표현식
       
        // 점수가 70점 이상이면 합격, 아니면 불합격
        //  score >= 70
        //      → true → "합격" → "Pass"
        //      → false → "불합격" → "Fail"
        int score = -40;
       
        System.out.println("Is Pass? " + (score >= 70));
       
        // 비교 연산자의 결과 값에 따라 원하는 값으로 반환되도록 할 수 있다.
        System.out.println((score >= 70 ? "Pass" : "Fail"));
       
        // score 가 음수이면 0 으로 양수이면 score 값 그대로 저장
        score = score < 0 ? 0 : score;
        System.out.println("score = " + score);
       
        System.out.println("-----------------------------------------------------");
        //---------------------------------------------------------------------------
        // 비트 연산자
        //  - 비트 단위로 연산하는 연산자
        //  - 비트 논리 연산자
        //      : 비트 단위로 논리 연산(AND, OR, XOR, NOT)
        //  - 비트 시프트 연산자
        //      : 비트 단위로 이동 연산
       
        // 다수의 상태를 처리하기 위한 데이터들을 한 번에 관리
       
        // 20 개의 전등의 상태를 관리하기 위해
        // 20 개의 boolean 타입 변수가 아닌
        // 32bit 인 int 타입 변수 하나를 이용
        int lightState = 0b0000_0000_0000_0000_0000;
        final int LIGHT_MASK = 0b1111_1111_1111_1111_1111;
       
        // 전원 ON
        lightState = lightState | LIGHT_MASK;
       
        // 전원 OFF
        lightState = lightState & (~LIGHT_MASK);
        // ~LIGHT_MASK
        //  = 0b1111_1111_1111_0000_0000_0000_0000_0000
        //    0b0100_1100_0110_0000_0000_0000_0000_0000
       
        // n 번째 전등 ON
        int lightNum = 5;
       
        int lightN = 1 << (lightNum - 1);
        // = 0b0001_0000
        lightState = lightState | lightN;
       
        // n 번째 전등 OFF
        lightState = lightState & (~lightN);
        // ~lightN = 0b1110_1111
       
        // Toggle → on/off
        //  N번째 전등이 ON 이면 OFF, OFF 이면 ON
        lightState = lightState ^ lightN;
        // lightN = 0b0001_0000
       
        System.out.println("-----------------------------------------------------");
        //---------------------------------------------------------------------------
       
    }
}

'java' 카테고리의 다른 글

Java : Loop Statement(반복문) 1  (0) 2023.03.17
Java : Conditional Statement(조건문)  (0) 2023.03.17
Java : Operator(연산자) 1  (0) 2023.03.17
Java : Input(입력)  (0) 2023.03.17
Java : Output(출력)  (0) 2023.03.17