누군가 이러한 작업을 해결하는 방법을 설명하십시오.정수의 시프트 연산자
int x = (Integer.MIN_VALUE << 1) >> 1;
예를 들어 어떻게 해결할 수 있는지 알고 싶습니다. 샘플에 Integer.MIN_VALUE (Integer.MAX_VALUE)가 포함되어 있으면 어떻게해야합니까?
누군가 이러한 작업을 해결하는 방법을 설명하십시오.정수의 시프트 연산자
int x = (Integer.MIN_VALUE << 1) >> 1;
예를 들어 어떻게 해결할 수 있는지 알고 싶습니다. 샘플에 Integer.MIN_VALUE (Integer.MAX_VALUE)가 포함되어 있으면 어떻게해야합니까?
시프트 연산자 (y << x
)는 y
의 비트를 'x'자만큼 왼쪽으로 시프트합니다. 가장 오른쪽 비트는 0
이됩니다. >>
연산자가 오른쪽으로 시프트되고 가장 왼쪽 비트 (부호 비트)의 값이 새로운 가장 왼쪽 비트에 복사됩니다.
대답을 해결하려면 초기 값 (Integer.MIN_VALUE)에 대한 비트 패턴이 필요하고 결과 비트 패턴을 얻기위한 연산을 수행해야합니다. 그런 다음 다시 10 진수 값으로 변환 할 수 있습니다.
그래서 제 2 호^31을 다음과 같이 제시해야합니다. 약간의 코드를 작성한 다음 연산을 수행하여 결과 비트 패턴을 얻습니다. 나는이 문제를 해결하는 빠른 방법이 존재한다고 생각한다. – Drylozav
빠른 방법은 작업을 수행하고 출력을 제공하는 짧은 프로그램을 작성하거나 프로그래머의 계산기로 수행하는 것입니다 (Windows의 경우 calc.exe가 유용합니다). 그러나 실제로 무슨 일이 일어나고 있는지 이해하려면 손으로 몇 번하는 것이 좋습니다. –
당신은 비트 시프트 연산자 작업, 나는 두 가지 제안 방법을 이해하려는 경우 : 그들이 무엇에 대한 몇 가지 가이드를 읽어
하지만 근무 교대가 어떤 코드를 보여줄 수 있습니까? – Drylozav
실제로 내가 준 링크를 읽었습니까? – DanielGibbs
yeaр. 지금 읽는 중 – Drylozav
글쎄, 당신은 당신이 왼쪽
에 전화 번호의 이진 표현을 이동 <<
(왼쪽 시프트)을 수행하여, 간단히 말해서 짧은 튜토리얼 http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html
에 따라 수, 즉 x = 0b0010
경우, 다음 x << 1
는 0b0100
된다 새로운 '0'비트가 오른쪽에 추가됩니다.
이와 비슷하게는 우측 시프트를 들어 x = 0b1010
경우 x >> 1
는 0b1101
, 우측 비트 사라져, 새로운 '하나'비트가되는 좌측 부가된다 (가장 왼쪽의 비트 값에 따라).
퍼즐을 해결하려면 Integer.MIN_VALUE
의 이진 표현을 알아야합니다. 매우 까다로울 필요는 없습니다.
최소값은 10000000000000000000000000000000
으로 표시됩니다. 32 1이야. 명확성을 위해, 우리는 단지 4 비트로 작업하는 척 해 봅시다. 이 경우 MIN_INT
은 1000
입니다. 이것은 32 비트에도 적용됩니다.
그러면 <<
을 1로 왼쪽으로 이동하여 모든 비트를 1 위치만큼 왼쪽으로 이동합니다. 따라서 1000
은 0000
이됩니다.
그런 다음 '>>'을 1만큼 오른쪽으로 이동하여 모든 비트를 1 위치만큼 오른쪽으로 시프트합니다 (이 경우에는 2를 곱하는 것과 같습니다). 이 경우 오른쪽 이동시 부호 비트가 복제되므로 0000
이됩니다. 1111
이면 1111
이됩니다. 이것은 몇몇 경우를 제외하고 2로 나누는 것과 같습니다. 복사하는 표지 비트에 지쳐 있어야하기 때문입니다.
잠깐, 구체적인 작업은 무엇입니까? –
실제 질문은 무엇입니까 ...? 교대 운영자가 어떻게 작동하는지 알고 있습니까? – nhgrif
이 숙제가 있습니까?과제 후 x 값을 계산해야합니까? –