Operación detallada de bits de Java

Hay tres tipos de operadores bit a bit de Java

<<       左移(又叫:算数左移,此时,它又等价于逻辑左移)
>>       右移(又叫:算数右移)
>>>      无符号右移(又叫:逻辑右移)

1. Los conocimientos básicos allanan el camino 


Todos sabemos que para los tipos de datos con signo, el dígito más a la izquierda del binario es el bit de signo, 0 representa positivo y 1 representa negativo. Aquí hay algunos conceptos

Desplazamiento lógico a la izquierda = desplazamiento aritmético a la izquierda: desbordamiento de bit alto, complemento de bit bajo 0
Desplazamiento lógico a la derecha: desbordamiento de bit bajo, complemento de bit alto 0
Desplazamiento aritmético a la derecha: desbordamiento de bit bajo, complemento de bit alto al valor del bit de signo

Por ejemplo, un número binario de 8 bits con signo 10101010, [] es el número agregado

Lógica a la izquierda por un bit: 0101010 [0]
Lógica a la izquierda por dos bits: 101010 [00]

Desplazamiento aritmético de un bit a la izquierda: 0101010 [0]
Desplazamiento aritmético de dos bits a la izquierda: 101010 [00]

Desplazamiento lógico un bit a la derecha: [0] 1010101
Desplazamiento lógico dos dígitos a la derecha: [00] 101010

Desplazamiento aritmético a la derecha en un bit: [1] 1010101
Desplazamiento aritmético a la derecha en dos bits: [11] 101010

El desplazamiento aritmético a la izquierda y el desplazamiento aritmético a la derecha se utilizan principalmente para multiplicar y dividir a la mitad números con signo.
El desplazamiento lógico a la izquierda y la lógica a la derecha se utilizan principalmente para multiplicar y dividir a la mitad números sin signo
(no hay tipos de datos sin signo en Java, C y C ++)

símbolo ejemplo Explicación
<< num << n Equivalente a Seguramente * 2 ^ {n}desplazamiento aritmético a la izquierda (desplazamiento lógico a la izquierda)
>> num >> n Equivalente a \ frac {num} {2 ^ {n}}, desplazamiento aritmético a la derecha
>>> num >>> n Desplazamiento lógico a la derecha, cuando num es un número positivo y el desplazamiento aritmético a la derecha tiene un efecto

2. Ejemplos detallados

<< significa desplazarse hacia la izquierda, independientemente de los números positivos y negativos, con 0 en el dígito inferior; 

Nota: Los siguientes tipos de datos son byte-8 por defecto

Independientemente de lo positivo o negativo al desplazarse hacia la izquierda, el bit bajo se rellena con 0

Número positivo: r = 20 << 2

  Complemento a dos de 20: 0001 0100

  Después de mover dos bits a la izquierda: 0101 0000

         Resultado: r = 80

Números negativos: r = -20 << 2

  -20 código binario original: 1001 0100

  El complemento binario de -20  : 1110 1011

  Complemento a dos de -20: 1110 1100

  Complemento a dos después de desplazarse a la izquierda: 1011 0000

        Codigo inverso: 1010 1111

        Código original: 1101 0000

        Resultado: r = -80

>> significa desplazarse hacia la derecha, si el número es positivo, el dígito superior se rellena con 0, si es negativo, el dígito superior se rellena con 1;

Nota: Los siguientes tipos de datos son byte-8 por defecto

Número positivo: r = 20 >> 2

  Complemento a dos de 20: 0001 0100

  Después de mover dos bits a la derecha: 0000 0101

       Resultado: r = 5

Números negativos: r = -20 >> 2

  -20 código binario original: 1001 0100

  El complemento binario de -20  : 1110 1011

  Complemento a dos de -20: 1110 1100 

  Complemento a dos después de cambiar a la derecha: 1111 1011 

        Codigo inverso: 1111 1010

        Código original: 1000 0101

        Resultado: r = -5

>>> significa desplazamiento a la derecha sin signo, también llamado desplazamiento lógico a la derecha, es decir, si el número es positivo, el bit alto se rellena con 0, y si el número es negativo, el bit alto también se rellena con 0 después del desplazamiento a la derecha

Número positivo: r = 20 >>> 2

    El resultado es el mismo que r = 20 >> 2;

Números negativos: r = -20 >>> 2

Nota: Los siguientes tipos de datos predeterminados son int 32 bits

  -20: Código fuente: 10000000 00000000 00000000 00010100

    Codigo inverso: 11111111 11111111 11111111 11101011

    Complemento: 11111111 11111111 11111111 11101100

Mover a la    derecha: 00111111 11111111 11111111 11111011

    Resultado: r = 1073741819

 

Suplemento: el complemento a uno se convierte al complemento, lo que significa sumar 1

           El complemento se convierte al código inverso, lo que significa restar 1

          Original- "Complemento: Invertir, sumar 1 para
          complementar -" Original: Restar 1, Invertir

Entonces, ¿has abandonado tus estudios?

Supongo que te gusta

Origin blog.csdn.net/Brave_heart4pzj/article/details/114526306
Recomendado
Clasificación