간단한 질문 : 자바 부호없는 오른쪽 시프트를 적용하는 경우 바이트 왜 int로서 그 위협을 변수 (뿐만 아니라 짧은) :부호없는 오른쪽 시프트
byte x = -1;
System.out.println(x >> 2);
System.out.println(x >>> 1);
System.out.println(Integer.MAX_VALUE);
콘솔 출력 :
-1
2147483647
2147483647
간단한 질문 : 자바 부호없는 오른쪽 시프트를 적용하는 경우 바이트 왜 int로서 그 위협을 변수 (뿐만 아니라 짧은) :부호없는 오른쪽 시프트
byte x = -1;
System.out.println(x >> 2);
System.out.println(x >>> 1);
System.out.println(Integer.MAX_VALUE);
콘솔 출력 :
-1
2147483647
2147483647
Java의 int 및 long에 대해서만 시프트 연산자를 사용할 수 있으므로 (다른 모든 숫자 연산자와 마찬가지로) 바이트를 이동하기 전에 자동으로 int로 캐스팅됩니다. 이는 또한 산술 오른쪽 시프트에서 발생하지만 -1
유형이 무엇이든간에 -1 >> 2
은 -1입니다. 이진 표현 111...111
이 오른쪽으로 이동되었으므로 111...111
이 여전히 논리적으로 이동하는 동안 011...111
즉 시프트 된 유형의 최대 값이됩니다.
추 신 : 산술 시프트는 부호가있는 시프트이고 논리 시프트는 부호없는 시프트입니다.
설명해 주셔서 감사합니다. 그것을 몰랐다. –
@MarkoTopolnik done. – Njol
부호없는 오른쪽 시프트뿐 아니라 거의 모든 연산자에서 int로 처리됩니다. – Ingo