JAVA

java_데이터타입(2항연산자)_22.05.19(day2)

양빵빵 2022. 5. 19. 15:34

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

package day02;

public class LogicalOperator {
    public static void main(String[] args) {
        boolean t = true, f=false;
        System.out.println(t | t);
        System.out.println(t | f);
        System.out.println(f | t);
        System.out.println(f | f);

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

        int x = 10, y = 20;
       boolean result1 = (x != 10) && (++y == 21);
       boolean result2 = (x == 10) || (++y == 21); // | 일 때 y=22, || 일때 y = 20;
                                                    // 단축평가 좌항에서 결과가 판단되면 우항 연산을 수행하지 않음.
        // x =  10 이 true 이므로 ++y = 21 연산을 수행 하지 않고 true 결과 출력 하여 ++y가 실행되지 않음.

        // 단축평가
        /*
         true && true => true : 우항이 true 이면 좌항 true인지 확인 후 결과값 출력
         true && false => false
         false && true => false : 우항이 false이면 좌항 결과에 상관 없이 false 이므로 우항에서 연산 종료 후 결과 값 출력.
         false && false => false
        */
        System.out.println("result1 = " + result1);
        System.out.println("result2 = " + result2);
        System.out.println("x = " + x);
        System.out.println("y = " + y);

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

        //논리 반전(!) - 단항 연산자
        System.out.println(!t);

        System.out.println(10 + 20); // +는 산술 연산자
        System.out.println("안녕"+"하세요"); // +는 결합 연산자
        //논리 & 논리 -> 논리 연산자
        // 정수 & 정수 -> 비트 연산자 // 피연산자에 따라 연산자의 열할이 달라진다.



    }
}

 

 

단항 연산자에서 살펴 보지 않았던 비트 반전 연산자

 

package day02;

public class BitOperator {
    public static void main(String[] args) {
        //비트연산자
        byte a = 5; // 0000 0101
        byte b = 3; // 0000 0011

        // & (비트곱) : 각 비트 자리수를 곱하세요.
        System.out.println(a & b); // & 의 피연산자가 정수 이므로 비트연산자
         // -> 0000 0001 = 1

        // |(비트합) : 각 비트 자리수를 더하세요. 단 1+1 = 1로 처리
        System.out.println(a | b);
        // -> 0000 0111 = 7

        // -> 0000 0110
        // ^(배타적 논리합) : 각 비트 자리수를 비교해서 다르면 1 같으면 0 (배타적이면 1, 아니면 0)
        System.out.println(a ^ b);

        //비트 이동 연산
        // << : 왼쪽으로 이동 -> 2의 이동숫자만큼 제곱으로 곱해라
        // >> : 오른쪽으로 이동 -> 2의 이동숫자만큼 제곱으로 나눠라

        // 00000000 00000000 00000000 11000000
        int x = 192 ;

        // 00000000 00000000 00000110 00000000 (왼쪽으로 3칸 이동)
        System.out.println(x << 3); // 192 * (2**3) => 192 * 8 = 1536

        // 00000000 00000000 00000000 00110000
        System.out.println(x >> 2); // 192 / (2**2) => 192 / 4 = 48

        // 비트 반전 연산자 (~) 단항 연산자
        int y = 8; // 0000 1000
        System.out.println(~y); // 1111 0111 // 음수를 변환하려면 2의 보수 표기 법 사용
                                // 1의보수 -> 1(부호)0001000
                                // 2의 보수 -> 1(부호)0001001 (+1)

    }
}