> Java > java지도 시간 > Java의 Shift 연산 방법(<<, >>, >>>)

Java의 Shift 연산 방법(<<, >>, >>>)

怪我咯
풀어 주다: 2017-06-30 10:31:08
원래의
1950명이 탐색했습니다.

아래 편집기에서 Java<<, >>,>>> 교대 작업 방법에 대한 기사를 가져올 수 있습니다. 편집자님이 꽤 좋다고 생각하셔서 지금 공유하고 모두에게 참고용으로 드리고자 합니다. 편집기를 따라 살펴보겠습니다

<<, 부호 있는 왼쪽 시프트는 피연산자의 전체 이진수를 지정된 자릿수만큼 왼쪽으로 이동하고 하위 비트를 0으로 채웁니다.

int leftShift = 10;
System.out.println("十进制:" + leftShift + ", 二进制:" + Integer.toBinaryString(leftShift));
int newLeftShift = letfShift << 2;
System.out.println("左移2位后十进制:" + newLeftShift + ", 左移2位后二进制" + Integer.toBinaryString(newLeftShift)); //正整数x左移n位后的十进制结果,x = x * 2^n
로그인 후 복사

위는 양의 정수이고, 연산 결과는 다음과 같습니다.

다음으로 음수를 2비트만큼 왼쪽으로 쉬프트하면 어떻게 되는지 살펴보겠습니다.

왜 이진수 -10에는 1이 그렇게 많나요? 잘 세어보면 정확히 32비트이다. 가장 먼저 이해해야 할 것은 Java 음수는 2의 보수 형식(보수 = 보수 + 1)으로 저장된다는 것입니다. 10의 이진수는 1010이고 보수는 0101입니다. 1을 더하면 보수가 0110입니다. 그렇다면 왜 여분의 1이 그렇게 많습니까? 이는 Java에서 int 유형이 8바이트, 즉 정확히 32비트를 차지하기 때문입니다. 원래 코드인 10의 상위 비트는 모두 0이고, 보완 코드의 상위 비트는 자연스럽게 1이 됩니다. 따라서 전체 연산은 2비트만큼 왼쪽으로 이동하고, 하위 비트는 0으로 채워집니다. 최종 연산 결과는 x = (|x| + 2^n)입니다.

>>, 부호 있는 오른쪽 시프트는 피연산자의 전체 이진 값을 지정된 자릿수만큼 오른쪽으로 이동하고, 정수의 상위 비트를 0으로 채우고, 음수의 상위 비트를 1로 채웁니다(유지) 음수의 부호는 변경되지 않음).


int rightShift = 10;
System.out.println("十进制:" + rightShift + ", 二进制:" + Integer.toBinaryString(rightShift));
int newRightShift = rightShift >> 2;
System.out.println("右移2位后十进制:" + newRightShift + ", 右移2位后二进制" + Integer.toBinaryString(newRightShift));  //右移n位后的运算数x十进制结果,x = x / 2
로그인 후 복사


위는 양의 정수이며, 연산 결과는 다음과 같습니다.

다음으로 음수를 오른쪽으로 2비트 이동하면 어떤 일이 발생하는지 살펴보겠습니다.

음수의 부호 있는 오른쪽 시프트의 기본 원리는 여전히 왼쪽 시프트와 동일합니다. 차이점은 부호 있는 오른쪽 시프트이기 때문에 오른쪽으로 시프트하는 최종 결과는 다음과 같습니다. -1. 정리하자면, 피연산자가 짝수이면 연산 결과는 x = -(|x| / 2)입니다. 피연산자가 홀수이면 연산 결과는 x = -(|x| / 2입니다. ) - 1.

> 오른쪽 시프트와 >> 부호 있는 오른쪽 시프트의 계산 결과는 같습니다

int rightShift = 10;
System.out.println("十进制:" + rightShift + ", 二进制:" + Integer.toBinaryString(rightShift));
int newRightShift = rightShift >>> 2;
System.out.println("右移2位后十进制:" + newRightShift + ", 右移2位后二进制" + Integer.toBinaryString(newRightShift));  //右移n位后的云算数x十进制结果,x = x / 2
로그인 후 복사

위는 양의 정수이며, 연산 결과는 다음과 같습니다.

다음으로 음의 정수를 살펴보겠습니다. 연산 결과는 다음과 같습니다.

부호 없는 시프트 뒤의 이진수와 부호 있는 시프트 뒤의 이진수는 같아 보이지만, 부호 있는 오른쪽 시프트 연산은 실제로는 부호, 즉 상위 비트를 무시하는 산술 연산이라는 점을 기억하세요. 0을 균일하게 채웁니다.

위 내용은 Java의 Shift 연산 방법(<<, >>, >>>)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿