비트연산 시 원래의 비트를 초과하는 수를 쉬프트하면 나오는 결과에 대해서
비트연산자 중 쉬프트 연산을 하면 <<수 만큼 밀립니다.
세번째 출력물에서는 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));
}
}
댓글