programing

>>와 >>의 차이점

javaba 2022. 9. 23. 23:18
반응형

>>와 >>의 차이점

와의 차이는 무엇입니까?>>>그리고.>>운영자(Java)?

>>산술 시프트가 맞습니까?>>>논리적 전환이 옳습니다.

연산 시프트에서는 부호 비트가 확장되어 수의 부호성을 유지한다.

예를 들어 -2는 8비트로 표시됩니다.11111110(가장 중요한 비트의 가중치가 음수이기 때문입니다).산술 시프트를 사용하여 조금만 오른쪽으로 이동하면11111111또는 -1 입니다.단, 논리적인 오른쪽 시프트는 값이 부호 있는 숫자를 나타낼 수 있다는 점에는 개의치 않습니다.모든 것을 오른쪽으로 이동하고 왼쪽부터0 으로 채웁니다.논리적인 시프트를 사용하여 -2의 오른쪽을 1비트 이동하면01111111.

>>>unsigned-shift 입니다.0 을 삽입합니다.>>서명되어 부호 비트를 확장합니다.

JLS 15.19 시프트 연산자

이동 연산자에는 왼쪽 이동이 포함됩니다.<<, 서명된 우측 시프트>>및 부호 없는 오른쪽 시프트>>>.

가치n>>sn오른쪽 방향의ssign-extension과 비트 위치.

가치n>>>sn오른쪽 방향의szero-extension과 비트 위치.

    System.out.println(Integer.toBinaryString(-1));
    // prints "11111111111111111111111111111111"
    System.out.println(Integer.toBinaryString(-1 >> 16));
    // prints "11111111111111111111111111111111"
    System.out.println(Integer.toBinaryString(-1 >>> 16));
    // prints "1111111111111111"

를 만들기 위해서 일들을 보다 긍정적인 상대 추가합니다.

System.out.println(Integer.toBinaryString(121));
// prints "1111001"
System.out.println(Integer.toBinaryString(121 >> 1));
// prints "111100"
System.out.println(Integer.toBinaryString(121 >>> 1));
// prints "111100"

때문에 긍정적이다 둘 다 및 부호 없는 변화 대부분의 비트에서 왼쪽으로 0을 추가할 것이다.

관련 질문

둘 다 우회전이지만>>>unsigned

매뉴얼에서 다음 항목을 참조하십시오.

부호 없는 오른쪽 시프트 연산자 ">>"는 0을 맨 왼쪽 위치로 이동하고, ">" 뒤의 왼쪽 위치는 부호 내선번호에 따라 달라집니다.

>>>항상 맨 왼쪽 비트에 0을 붙입니다.>>기호 내용에 따라 1 또는 0을 붙입니다.

논리적인 우측 이동(v >>> n)의 비트 값이 반환됩니다.v에 의해 오른쪽으로 이동되었다n비트 위치 및 0이 왼쪽에서 이동됩니다.바이너리로 작성된 8비트 값 이동을 고려해 보십시오.

01111111 >>> 2 = 00011111
10000000 >>> 2 = 00100000

비트를 부호 없는 음이 아닌 정수로 해석하면 논리 우측 이동은 숫자를 대응하는 2의 거듭제곱으로 나누는 효과가 있습니다.그러나 숫자가 2의 보완 표현일 경우 논리 오른쪽 이동은 음수를 올바르게 분할하지 않습니다.예를 들어 위의 두 번째 오른쪽 시프트는 비트가 부호 없는 숫자로 해석될 때 128에서 32로 이동합니다.그러나 Java에서 일반적으로 비트가 2의 보수로 해석될 때 -128에서 32로 이동합니다.

2의 이동 「2」 「2」)이 합니다.v >> n)의이 값을 입력하면 비트는v으로 n비트 위치 및 v의 왼쪽 비트의 복사본이 왼쪽에서 이동됩니다.

01111111 >> 2 = 00011111
10000000 >> 2 = 11100000

비트가 2의 보완 표현에 있는 숫자일 경우 산술적 오른쪽 시프트는 2의 거듭제곱으로 나누는 효과가 있습니다.이것은 가장 왼쪽 비트가 부호 비트이기 때문에 동작합니다.2의 거듭제곱으로 나누면 부호는 동일하게 유지되어야 한다.

Bitwise 및 Bit Shift 연산자에 대한 자세한 내용 보기

>>      Signed right shift
>>>     Unsigned right shift

비트 패턴은 왼쪽 피연산자에 의해 지정되며, 오른쪽 피연산자에 의해 이동되는 위치 수는 오른쪽 피연산자에 의해 지정됩니다. 없는 연산자 " " " " ">>> 0을 맨 왼쪽 위치로 옮깁니다.

, 「 」뒤의 가장 .>>부호 확장자에 따라 다릅니다.

말하면 단히 in in in in in in in>>>항상 0을 가장 왼쪽 위치로 이동합니다.>>숫자 기호(음수 1, 양수 0)를 기준으로 이동한다.


예를 들어, 음수뿐만 아니라 양수로도 시도해 보세요.

int c = -153;
System.out.printf("%32s%n",Integer.toBinaryString(c >>= 2));
System.out.printf("%32s%n",Integer.toBinaryString(c <<= 2));
System.out.printf("%32s%n",Integer.toBinaryString(c >>>= 2));
System.out.println(Integer.toBinaryString(c <<= 2));

System.out.println();

c = 153;
System.out.printf("%32s%n",Integer.toBinaryString(c >>= 2));
System.out.printf("%32s%n",Integer.toBinaryString(c <<= 2));
System.out.printf("%32s%n",Integer.toBinaryString(c >>>= 2));
System.out.printf("%32s%n",Integer.toBinaryString(c <<= 2));

출력:

11111111111111111111111111011001
11111111111111111111111101100100
  111111111111111111111111011001
11111111111111111111111101100100

                          100110
                        10011000
                          100110
                        10011000

연산자 「」 「」 「」).>>> N하여 부호 끝을 채웁니다는 N개의 위치로 비트를 오른쪽으로 이동하여 부호 비트를 폐기하고 N개의 왼쪽 끝에 0을 채웁니다.예를 들어 다음과 같습니다.

-1 (in 32-bit): 11111111111111111111111111111111

a a a>>> 1을 사용하다

2147483647: 01111111111111111111111111111111

연산자 「」 「」 「 」>> N위치로 비트를 의 왼쪽 "N" "N" "N" "N" "N" "N" "N" "N" "N" "N" "N" "N" "1."예를 들어 다음과 같습니다.

-2 (in 32-bit): 11111111111111111111111111111110

a a a>> 1을 사용하다

-1: 11111111111111111111111111111111

언급URL : https://stackoverflow.com/questions/2811319/difference-between-and

반응형