본문 바로가기
카테고리 없음

(Java) 비트연산 시 원래의 비트를 초과하는 수를 쉬프트하면 나오는 결과에 대해서

by 팁텍북 2017. 10. 27.

비트연산 시 원래의 비트를 초과하는 수를 쉬프트하면 나오는 결과에 대해서


비트연산자 중 쉬프트 연산을 하면 <<수 만큼 밀립니다.


세번째 출력물에서는 0이 나왔고, 그 다음 출력에서는 11111111111111111111111111111110라는 값이 나왔습니다.


이유가 뭘까요?


비트연산에서는 가지고 있는 수를 초과하여 쉬프트하면 쉬프트요청 수 % 총 비트의 값, 즉 쉬프트요청수에서 총 비트를 나눈 값의 나머지 만큼 쉬프트를 하게 됩니다.

초과를 하면 순환을 하는 순환구조로 이해하면 될 것 같습니다.


고맙습니다.



package operations;

public class BItExample {
    public static void main(String[] args) {
        
        int num1 = 0xFFFFFFFE;
        
        System.out.println(Integer.toBinaryString(num1));
        int num2=num1<<30;
        int num3=num1<<31;
        int num4=num1<<32;
        int num5=num1<<33;
        int num6=num1<<40;
        
        System.out.println(Integer.toBinaryString(num2));
        System.out.println(Integer.toBinaryString(num3));
        System.out.println(Integer.toBinaryString(num4));
        System.out.println(Integer.toBinaryString(num5));
        System.out.println(Integer.toBinaryString(num6));
    
    }
}


댓글