¿Por qué el resultado de un número negativo en el operador de turno >> es diferente de la división normal?

Estoy tratando de entender el concepto de operadores de turno y estaba probando el siguiente código:

15 >> 2;    
- 15 >> 2 

El resultado de la primera declaración es 3 como 15/4 = 3 pero el resultado de la segunda declaración es -4.

Entiendo que el binario de -15 es 11110001 y cuando cambiamos 2 a la derecha, tenemos 11111100, y esto es -4. pero no entiendo por qué el resultado es diferente de la división simple que es -15 / 4 = -3 y no -4?

por favor guíame por qué sucedió esto?

Respuesta 1

El operador de turno elimina cualquier fracción matemática al tomar el piso, no el truncamiento. El JLS, Sección 15.19 , establece:

El valor de n >> ses posiciones de bit ndesplazadas a la derecha scon extensión de signo. El valor resultante es . Para valores no negativos de , esto es equivalente a truncar la división de enteros, calculada por el operador de división de enteros , por dos a la potencia .floor(n / 2s)n/s

El piso de -3.75es -4mientras que el truncamiento habría cedido -3.

Cuando el valor se desplaza a la derecha, los bits se pierden a medida que se desplazan "fuera del final" del valor. Esto es lo que es responsable de la operación del piso.

-15: 11110001
 -4: 11111100 // The rightmost 1 bit above is lost, resulting in what looks like the floor function.
Respuesta: 2

Hola, estoy tratando de abrir el archivo de Word usando el programa Java. El programa me da el siguiente error "No se puede hacer una referencia estática al método abierto (Archivo) no estático desde el tipo Escritorio No sé cómo ...

Estoy construyendo una habilidad de Alexa personalizada en la que puedo preguntar el nombre de Usuario y repetirlo. (Funcionando bien). Ahora, la siguiente parte es confirmar el nombre del usuario. Alexa: "¡Por favor confirma tu nombre!" <Br & ...

Tengo un formulario que contiene JTextFields, algunos son específicos para francés y otros para árabe. Quiero cambiar de un idioma a otro sin presionar la tecla Alt + Mayús. Cualquier ayuda sobre la solución ...

Estoy haciendo una aplicación en Java usando JFreeChart que muestra un gráfico de líneas XY. El problema es que muestra todos los puntos del conjunto de datos en las líneas, y no quiero mostrar estos puntos. Ninguna ...