2013-10-28 1 views
-1

누군가 이러한 작업을 해결하는 방법을 설명하십시오.정수의 시프트 연산자

int x = (Integer.MIN_VALUE << 1) >> 1; 

예를 들어 어떻게 해결할 수 있는지 알고 싶습니다. 샘플에 Integer.MIN_VALUE (Integer.MAX_VALUE)가 포함되어 있으면 어떻게해야합니까?

+4

잠깐, 구체적인 작업은 무엇입니까? –

+0

실제 질문은 무엇입니까 ...? 교대 운영자가 어떻게 작동하는지 알고 있습니까? – nhgrif

+0

이 숙제가 있습니까?과제 후 x 값을 계산해야합니까? –

답변

2

시프트 연산자 (y << x)는 y의 비트를 'x'자만큼 왼쪽으로 시프트합니다. 가장 오른쪽 비트는 0이됩니다. >> 연산자가 오른쪽으로 시프트되고 가장 왼쪽 비트 (부호 비트)의 값이 새로운 가장 왼쪽 비트에 복사됩니다.

대답을 해결하려면 초기 값 (Integer.MIN_VALUE)에 대한 비트 패턴이 필요하고 결과 비트 패턴을 얻기위한 연산을 수행해야합니다. 그런 다음 다시 10 진수 값으로 변환 할 수 있습니다.

+0

그래서 제 2 호^31을 다음과 같이 제시해야합니다. 약간의 코드를 작성한 다음 연산을 수행하여 결과 비트 패턴을 얻습니다. 나는이 문제를 해결하는 빠른 방법이 존재한다고 생각한다. – Drylozav

+0

빠른 방법은 작업을 수행하고 출력을 제공하는 짧은 프로그램을 작성하거나 프로그래머의 계산기로 수행하는 것입니다 (Windows의 경우 calc.exe가 유용합니다). 그러나 실제로 무슨 일이 일어나고 있는지 이해하려면 손으로 몇 번하는 것이 좋습니다. –

1

당신은 비트 시프트 연산자 작업, 나는 두 가지 제안 방법을 이해하려는 경우 : 그들이 무엇에 대한 몇 가지 가이드를 읽어

  • 첫째 : 예를 들어 herehere을.
  • 일부 코드를 작성하고 출력을 살펴보십시오. 그렇게하면 비트 시프트 연산자가 Integer.MIN_VALUEInteger.MAX_VALUE과 같은 값에 실제로 영향을 미치는지 확인할 수 있습니다.
+0

하지만 근무 교대가 어떤 코드를 보여줄 수 있습니까? – Drylozav

+1

실제로 내가 준 링크를 읽었습니까? – DanielGibbs

+0

yeaр. 지금 읽는 중 – Drylozav

2

글쎄, 당신은 당신이 왼쪽
에 전화 번호의 이진 표현을 이동 << (왼쪽 시프트)을 수행하여, 간단히 말해서 짧은 튜토리얼 http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html

에 따라 수, 즉 x = 0b0010 경우, 다음 x << 10b0100된다 새로운 '0'비트가 오른쪽에 추가됩니다.

이와 비슷하게는 우측 시프트를 들어 x = 0b1010 경우 x >> 10b1101, 우측 비트 사라져, 새로운 '하나'비트가되는 좌측 부가된다 (가장 왼쪽의 비트 값에 따라).

퍼즐을 해결하려면 Integer.MIN_VALUE의 이진 표현을 알아야합니다. 매우 까다로울 필요는 없습니다.

1

최소값은 10000000000000000000000000000000으로 표시됩니다. 32 1이야. 명확성을 위해, 우리는 단지 4 비트로 작업하는 척 해 봅시다. 이 경우 MIN_INT1000입니다. 이것은 32 비트에도 적용됩니다.

그러면 <<을 1로 왼쪽으로 이동하여 모든 비트를 1 위치만큼 왼쪽으로 이동합니다. 따라서 10000000이됩니다.

그런 다음 '>>'을 1만큼 오른쪽으로 이동하여 모든 비트를 1 위치만큼 오른쪽으로 시프트합니다 (이 경우에는 2를 곱하는 것과 같습니다). 이 경우 오른쪽 이동시 부호 비트가 복제되므로 0000이됩니다. 1111이면 1111이됩니다. 이것은 몇몇 경우를 제외하고 2로 나누는 것과 같습니다. 복사하는 표지 비트에 지쳐 있어야하기 때문입니다.

+0

MIN_VALUE는 실제로 1이고 4 비트에 대해 IE 1000이옵니다. 단어 길이에 상관없이 모든 1은 항상 -1이됩니다. – Radiodef

+0

맙소사, 네 말이 맞아, 나는 완전히 망쳤다. 내가 고칠거야. – Clark