Operador de desplazamiento de bit derecho sin firmar y firmado en Java

MD Aminul Islam 12 octubre 2023
Operador de desplazamiento de bit derecho sin firmar y firmado en Java

Este tutorial educa sobre los operadores de desplazamiento de bits a la derecha firmados y no firmados en Java. También demuestra su uso a través de ejemplos de código.

Operador de desplazamiento de bit derecho sin firmar y firmado en Java

A diferencia de otros lenguajes de programación, Java admite dos operadores de desplazamiento de bit a la derecha.

  1. El desplazamiento de bit a la derecha firmado, representado por el símbolo >>.
  2. El desplazamiento de bits a la derecha sin signo, representado por el símbolo >>>.

Tenga en cuenta que otros lenguajes de programación como C, C++, etc. contienen solo el operador de desplazamiento de bits a la derecha con signo (>>), pero Java le permite utilizar operaciones de desplazamiento con y sin signo.

Diferencia entre el operador de desplazamiento de bit derecho firmado y sin firmar

El desplazamiento a la derecha con signo (>>) desplaza cada bit de un número a la derecha y conserva el bit de signo (bit más a la izquierda). El bit de signo se utiliza para reservar el signo del número. El número sería positivo o negativo si el bit de signo es 0 o 1, respectivamente.

Por otro lado, el desplazamiento a la derecha sin signo (>>>) también realiza una operación similar al desplazamiento a la derecha con signo, pero la diferencia es que el desplazamiento a la derecha sin signo siempre llena la posición más a la izquierda con el 0 ya que el valor es No firmado.

Si aplica el desplazamiento a la derecha sin signo en un número positivo, le mostrará el mismo resultado que el desplazamiento a la derecha con signo, pero si proporciona el número negativo, el resultado será positivo ya que todos los bits con signo se reemplazan por 0.

Ejemplo de operador de desplazamiento de bits a la derecha con signo (>>):

Let's take a number -11, and we will shift 2 bits towards the right.

+11 in 8-bit form = 0000 1011
1's Complement    = 1111 0100
2's Compelement   =        +1
-----------------------------
2's Complement of -11 = 1111 0101

n = -11 =  1111 0101
Shift 1st bit = 1111 1010
Shift 2nd bit = 1111 1101

1111 1101
       -1
------------------------------
1111 1100 = 1's Complement
0000 0011 = Complement of each bit

So -11 >> 2 = -3 which is in binary 0000 0011.

Ejemplo de operador de desplazamiento de bit a la derecha sin signo (>>>):

n = 10 = 0000 1010 //the leftmost bit position is filled with '0' as 'n' is positive

Now Shift the '3' bits towards the right; you can do it directly, but let's go one-by-one
n = 0000 1010
Shift 1st bit = 0000 0101
Shift 2nd bit = 0000 0010
Shift 3rd bit = 0000 0001

So, n >>> 3 = 0000 0001 which would be 1 in decimals.

We can also use this formula:(Given decimal number/2^n)
Where 'n' is the required number of shifts, in our case, it is '3'.

So, n >>> 3 = 10/2^3 = 10/8 = 1

Recuerde, todos los bits desplazados se perderán en ambos casos (desplazamiento a la derecha con signo y sin signo).

Uso de desplazamiento de bit a la derecha firmado (>>) en Java

Realizamos una operación de desplazamiento de bits a la derecha con signo en un número en el siguiente ejemplo.

Código de ejemplo:

public class SignedRightShift {
  public static void main(String args[]) {
    int a = -11;
    System.out.println(a >> 2);

    int b = 4;
    System.out.println(b >> 1);
  }
}

Producción :

-3
2

Uso de desplazamiento de bits a la derecha sin firmar (>>>) en Java

El siguiente ejemplo ilustra una operación de desplazamiento de bits a la derecha sin signo en un número.

Código de ejemplo:

public class UnsignedRightShift {
  public static void main(String args[]) {
    // The binary representation of -1 is all "111..1".
    int a = -1;

    // The binary value of 'a >>> 29' is "00...0111"
    System.out.println(a >>> 29);

    // The binary value of 'a >>> 30' is "00...0011"
    System.out.println(a >>> 30);

    // The value of 'a >>> 31' is "00...0001"
    System.out.println(a >>> 31);
  }
}

Producción :

7
3
1
MD Aminul Islam avatar MD Aminul Islam avatar

Aminul Is an Expert Technical Writer and Full-Stack Developer. He has hands-on working experience on numerous Developer Platforms and SAAS startups. He is highly skilled in numerous Programming languages and Frameworks. He can write professional technical articles like Reviews, Programming, Documentation, SOP, User manual, Whitepaper, etc.

LinkedIn

Artículo relacionado - Java Operator