2010-03-26 2 views
5

Java의 >> (부호가있는) 및 >>> (부호없는) 오른쪽 비트 시프트 연산자가 다르게 수행된다고 생각할 이유가 있습니까? 내 컴퓨터에서 차이점을 발견 할 수 없습니다.자바 >> >> >> >> >> 오른쪽 시프트 연산자의 성능이 다릅니다.

이것은 전적으로 학문적 인 질문입니다. 결코 병목이 될 수는 없을 것입니다. 알아요. 당신이 제일 중요하게 생각하는 것을 쓰는 것이 가장 좋습니다. 예를 들어 2로 나눌 때 >>를 사용하십시오.

어떤 아키텍처가 어떤 작업을 명령으로 구현했는지 추측합니다.

+0

둘 다 비슷한 사이클을 소요하는 네이티브 CPU 명령어 (논리/산술 오른쪽 시프트)로 변환 될 것입니다. – kennytm

+4

아니요, 2로 나누기 위해'/ 2'를 사용하십시오. –

+1

+1은 >>> 연산자를 찾습니다. 그리고 컴파일러가 수행하는 최적화를 과소 평가하지 마십시오. 이 수준에서 종종 최적화하면 상황이 악화 될 수 있습니다. – Thirler

답변

3

No. 컴파일러가이를 바이트 코드로 변환하고 JVM이 아키텍처의 바이트 코드를 해석합니다. 나는 당신의 아키텍처가 두 클럭 사이클에서 수행되는 두 가지 연산을 포함하는 명령어 세트를 가지고 있다고 가정하는 것이 안전하다고 생각한다.

어쨌든 이러한 연산자의 동작에는 차이가 있으므로 상호 교환 할 수있는 것과는 다릅니다.

+0

@Tim Bender : +1 ... P6 아키텍처 * ">>"any *는 단 한 번의 AFAIK이므로 P4가 한 사이클 이었기 때문에 x86 세계에서 * ">> 1"*. – SyntaxT3rr0r

+0

제 생각에 그것은 제 질문이었습니다 : 일반적인 아키텍처가 두 가지를 모두 지침으로 구현합니까? 그리고 네가 말했듯이 이것은 행동이 동일한 경우에만 적용됩니다 (음수가 아닌 정수). –