비트연산자

han.user();·2023년 3월 4일
0
post-thumbnail

비트 연산자

//  1. 비트 논리 연산자
//  1-1. AND 연산자 (&)
    System.out.println("== & ==");
    int num1 = 5;
    int num2 = 3;
    int result = 0;
    
    result = num1 & num2;
    System.out.println("result = " + result);
    System.out.println(Integer.toBinaryString(num1));
    // 2진수로 바꿔주는거, 근데 3자리로 출력됨, 그래서 아래와 같이 수정
    System.out.printf("%04d\n", Integer.parseInt(Integer.toBinaryString(num1)));
    System.out.printf("%04d\n", Integer.parseInt(Integer.toBinaryString(num2)));
    System.out.printf("%04d\n", Integer.parseInt(Integer.toBinaryString(result)));
    // 04의 의미는 4자리수를 출력하는데 %를 넣으면 4자리수를 빈값은 0을 채움
    // d는 정수형 문자를 받는 서식문자
    // &(앤드)연산이라서 둘 다 1인 곳만 1로 출력됨 (0101+0011=0001)

        
//  1-2. OR 연산자 (|)
    System.out.println("== | ==");
    result = num1 | num2;
    System.out.println("result = " + result);
    System.out.printf("%04d\n", Integer.parseInt(Integer.toBinaryString(num1)));
    System.out.printf("%04d\n", Integer.parseInt(Integer.toBinaryString(num2)));
    System.out.printf("%04d\n", Integer.parseInt(Integer.toBinaryString(result)));
    // |(오어)연산이라서 둘 중 하나만 1이면 1로 출력됨 (0101+0011=0111)
        
        
//  1-3. XOR 연산자 (^)
    System.out.println("== ^ ==");
    result = num1 ^ num2;
    System.out.println("result = " + result);
    System.out.printf("%04d\n", Integer.parseInt(Integer.toBinaryString(num1)));
    System.out.printf("%04d\n", Integer.parseInt(Integer.toBinaryString(num2)));
    System.out.printf("%04d\n", Integer.parseInt(Integer.toBinaryString(result)));
    // ^(엑스오어)연산이라서 두개가 같으면 0, 다르면 1로 출력 (0101+0011=0110)        

//  1-4. 반전 연산자 (~)
    System.out.println("== ~ ==");
        
    num1 = 5;
    result = ~num1;
    System.out.println("result = " + result);
    System.out.printf("%04d\n", Integer.parseInt(Integer.toBinaryString(num1)));
    System.out.printf("%s\n", Integer.toBinaryString(result));
    // 반전연산자여서 num1의 5의값 0101이 1010으로 바뀌고 앞자리 ..000도 전부...111로 바뀜
    //result = -6  / 0101 -> 11111111111111111111111111111010
    // 음수가 됨


//  2. 비트 이동 연산자
//  2-1. << 연산자
    int numA = 3;
    result = numA << 1;
        
    System.out.println("result = " + result);
    System.out.printf("%04d\n", Integer.parseInt(Integer.toBinaryString(numA)));
    System.out.printf("%04d\n", Integer.parseInt(Integer.toBinaryString(result)));
    // numA = 6
    // 0011   <-3
    // 0110   <- 좌측으로 한칸씩 이동해서 6이됨
        

//  2-2. >> 연산자
    result = numA >> 1;
    System.out.println("result = " + result);
    System.out.printf("%04d\n", Integer.parseInt(Integer.toBinaryString(numA)));
    System.out.printf("%04d\n", Integer.parseInt(Integer.toBinaryString(result)));        
    // numA = 1
    // 0011   <-3
    // 0001   <- 우측으로 한칸씩 이동해서 1이됨
    // %를 넣고 4자리수를 못채우면 맨앞에 0이 들어감
        
        
//  2-3. >>> 연산자
    numA = -5;
    result = numA >> 1;
    System.out.printf("%s\n", Integer.toBinaryString(numA));
    System.out.printf("%s\n", Integer.toBinaryString(result));
        
    result = numA >>> 1;
    System.out.printf("%s\n", Integer.toBinaryString(numA));
    System.out.printf("%s\n", Integer.toBinaryString(result));       
        
    //  11111111111111111111111111111011
    //  11111111111111111111111111111101
    //  11111111111111111111111111111011
    //  1111111111111111111111111111101    <- 맨 앞 0은 생략됨

    }
}
profile
I'm still hungry.

0개의 댓글