<<、>>、>>>Operación de cambio

<<, >>, >>> operación de cambio

  <<, desplazamiento a la izquierda con signo, desplaza el binario del operando hacia la izquierda el número especificado de dígitos y rellena los bits inferiores con 0.

int leftShift = 10; 
System.out.println("Decimal:" + leftShift + ", binary: " + Integer.toBinaryString(leftShift)); 
int newLeftShift = letfShift << 2; 
System.out.println("Desplazamiento a la izquierda 2 dígitos a decimal: " + newLeftShift + ", desplazamiento a la izquierda 2 dígitos a binario" + Integer.toB inaryString(newLeftShift)); // El resultado decimal del entero positivo x desplazado a la izquierda por n bits, x = x * 2^n

Los anteriores son números enteros positivos, y los resultados de la operación son los siguientes.

A continuación, veamos qué sucede cuando un número negativo se desplaza 2 bits hacia la izquierda. El resultado de la operación es el siguiente.

¿Por qué hay tantos 1 en el binario de -10? Cuente con cuidado y hay exactamente 32 bits. Lo primero que debe comprender es que los números negativos de Java se almacenan en forma de complemento (complemento = complemento + 1), el binario de 10 es 1010, y su complemento es 0101, y sumar 1 es el complemento 0110. Entonces, ¿por qué hay tantos 1? Esto se debe a que el tipo int ocupa 8 bytes en Java, que son exactamente 32 bits. Los bits altos del código original de 10 son todos 0, y los bits altos de su código inverso naturalmente se convierten en 1. Por lo tanto, el desplazamiento total a la izquierda es de 2 bits y los bits inferiores se rellenan con 0. El resultado final de la operación es x = (|x| + 2^n).

  >>, desplazamiento a la derecha con signo, desplaza el binario del operando a la derecha el número de dígitos especificado, rellena los bits altos del número entero con 0 y rellena los bits altos del número negativo con 1 (mantiene el signo del número negativo sin cambios).

int rightShift = 10; 
System.out.println("Decimal:" + rightShift + ", binary: " + Integer.toBinaryString(rightShift)); 
int newRightShift = rightShift >> 2; 
System.out.println("Desplazar a la derecha 2 dígitos a decimal: " + newRightShift + ", desplazar a la derecha 2 dígitos a binario" + Integer.toBinaryString(newRightShift)); //El operando x resultado decimal después desplazamiento a la derecha n bits, x = x / 2

Los anteriores son números enteros positivos, y los resultados de la operación son los siguientes.

A continuación, veamos qué sucede cuando un número negativo se desplaza 2 bits hacia la derecha. El resultado de la operación es el siguiente.

 

El principio básico del desplazamiento a la derecha con signo de un número negativo es el mismo que el del desplazamiento a la izquierda, la diferencia es el cálculo del resultado, porque este es un desplazamiento a la derecha con signo, y el resultado final del desplazamiento a la derecha será -1. En resumen, si el operando es par, entonces el resultado de su operación es x = -(|x| / 2), si el operando es impar, entonces su resultado de la operación es x = -(|x| / 2) - 1.

  >>>, desplazamiento a la derecha sin signo, ya sea positivo o negativo, los bits altos se rellenan con 0 (se ignora el bit de signo)

Primero mire los números positivos, los números positivos >>> desplazamiento a la derecha sin signo y >> desplazamiento a la derecha con signo tienen los mismos resultados de cálculo

int rightShift = 10; 
System.out.println("Decimal:" + rightShift + ", binary: " + Integer.toBinaryString(rightShift)); 
int newRightShift = rightShift >>> 2; 
System.out.println("Desplazar a la derecha 2 dígitos al decimal: " + newRightShift + ", desplazar a la derecha 2 dígitos al binario" + Integer.toB inaryString(newRightShift)); //El resultado decimal de las matemáticas en la nube x después de desplazarse a la derecha n bits, x = x / 2

Los anteriores son números enteros positivos, y los resultados de la operación son los siguientes.

A continuación, observe los números enteros negativos. El resultado de la operación es el siguiente.

Aunque el binario después del desplazamiento sin signo y el binario después del desplazamiento con signo tienen el mismo aspecto, los resultados son muy diferentes. Recuerde que la operación de desplazamiento a la derecha con signo es en realidad una operación aritmética que ignora el signo, es decir, los bits altos se rellenan uniformemente con 0.

Reenviado de: <<, >>, >>> operación de desplazamiento - OKevin - Blog Garden <<, desplazamiento a la izquierda con signo, desplaza el binario del operando a la izquierda en un número específico de dígitos y rellena los bits inferiores con 0. Los anteriores son números enteros positivos, y los resultados de la operación son los siguientes. A continuación, veamos qué sucede cuando un número negativo se desplaza 2 bits hacia la izquierda. El resultado de la operación es el siguiente. ¿Por qué aparece el binario -10? https://www.cnblogs.com/yulinfeng/p/6602902.html

 

Supongo que te gusta

Origin blog.csdn.net/gonggong11qqqww/article/details/123654923
Recomendado
Clasificación