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 desplazamiento aritmético a la izquierda (desplazamiento lógico a la izquierda) |
>> | num >> n | Equivalente a , 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?