1. ^ (operador OR exclusivo)
^ Es un operador binario para binario. Reglas de operación: si dos valores binarios son iguales en el mismo bit, el bit en el resultado es 0; de lo contrario, es 1, como 1011 y 0010 = 1001.
2. | (u operador)
| Es un operador binario para binario. Reglas de operación: si dos valores binarios tienen al menos un 1 en el mismo bit, el bit en el resultado es 1; de lo contrario, es 0, como 1011 y 0010 = 1011.
3. & (y operador)
& Es un operador binario para binario. Cabe señalar que && es un identificador que representa "y" entre las condiciones de juicio en java, & es un operador binario, si dos valores binarios son 1 en el mismo bit, el bit en el resultado es 1; de lo contrario, si es 0, se puede considerar que ambos son verdaderos (1), y el resultado también es verdadero (1), como 1011 & 0110 = 0010.
& Hay también un lugar más importante, que también es un problema común en las entrevistas, es decir, el operador puede calcular el resto. Sabemos que la más lenta de las cuatro operaciones aritméticas es la división, y la operación restante es aún más lenta, por lo que puede usar & para encontrar rápidamente el resto de dos números. Veamos un ejemplo:
public ModTest{
public static void main(String[] args){
System.out.println(45 & 11);
System.out.println(45 & 7);
}
/**result:3, 5*/
}
Dados dos valores de xey, si desea encontrar el resto de xey, solo necesita x & (y-1). Como se muestra en el ejemplo anterior, si desea encontrar el resto de 45 y 12 (45 y 8), solo necesita 45 y 11 (45 y 7).
Los siguientes tres operadores son operadores bit a bit
>> x (constante): moverse hacia la derecha en x bits (el vértice se mueve en qué dirección), si el número es positivo, el bit alto (más a la izquierda) se rellena con x ceros, si es un número negativo, el superior el bit se llena con x Uno.
<< x (constante): Mueva x bits a la izquierda (el vértice se mueve en qué dirección), sin importar el bit bajo (más a la derecha) del número positivo o negativo, agregue x ceros.
<<<: No existe tal representación.
>>> x (constante): indica un desplazamiento a la derecha sin signo en x bits. El llamado sin signo se compara con >> x. Después de esta operación, no importa que se mueva el bit alto (más a la izquierda) del número positivo o negativo, 0 está agregado.
4. << (operador de cambio a la izquierda)
Ejemplo 1: -20 << 2
Código original: 10000000 00000000 00000000 00010100
Código inverso: 11111111 11111111 11111111 11101011 (el bit de signo permanece sin cambios, los demás bits se invierten)
Código de complemento: 11111111 11111111 11111111 11101100 (código inverso + 1)
Mueva dos dígitos a la izquierda (agregue 0 a los dos dígitos del extremo derecho)
Complemento: 11111111 11111111 11111111 10110000
Codigo inverso: 11111111 11111111 11111111 10101111 (complemento-1)
Código original: 10000000 00000000 00000000 01010000 (el bit de signo permanece sin cambios, los demás bits se invierten)
Resultado: -80
Ejemplo 2: 20 << 2
Código original (código inverso, código de complemento): 00000000 00000000 00000000 00010100
Mueva dos dígitos a la izquierda (agregue 0 a los dos dígitos del extremo derecho)
Código original (código inverso, código de complemento): 00000000 00000000 00000000 01010000
Resultados: 80
5. >> (desplazar operador a la derecha)
Ejemplo 1: -20 >> 2
Código original: 10000000 00000000 00000000 00010100
Código inverso: 11111111 11111111 11111111 11101011 (el bit de signo permanece sin cambios, los demás bits se invierten)
Código de complemento: 11111111 11111111 11111111 11101100 (código inverso + 1)
Mueva dos bits a la derecha (agregue 1 a los dos bits más a la izquierda)
Complemento: 11111111 11111111 11111111 11111011
Codigo inverso: 11111111 11111111 11111111 11111010 (complemento-1)
Código original: 10000000 00000000 00000000 00000101 (el bit de signo permanece sin cambios, los demás bits se invierten)
Resultado: -5
Ejemplo 2:20 >> 2
Código original (código inverso, código de complemento): 00000000 00000000 00000000 00010100
Mueva dos bits a la derecha (agregue 0 a los dos bits más a la izquierda)
Código original (código inverso, código de complemento): 00000000 00000000 00000000 00000101
Resultado: 5
6. >>> (operador de cambio a la derecha sin firmar)
Ejemplo 1: -2 >>> 1
Código original: 10000000 00000000 00000000 00000010
Código inverso: 11111111 11111111 11111111 11111101 (el bit de signo permanece sin cambios, los demás bits se invierten)
Código de complemento: 11111111 11111111 11111111 11111110 (código inverso + 1)
Desplazar 1 bit a la derecha (operador de bit sin signo, solo agregue 0 al bit más a la izquierda)
Complemento: 01111111 11111111 11111111 11111111
Código inverso: 01111111 11111111 11111111 11111111 (el bit alto es 0, número positivo)
Código original: 01111111 11111111 11111111 11111111 (igual que el código inverso)
Resultado: 2147483647
Ejemplo 2: 2 >>> 1
Código original (código inverso, código de complemento): 00000000 00000000 00000000 00000010
Mueva un bit a la derecha (agregue 0 al bit más a la izquierda)
Código original (código inverso, código de complemento): 00000000 00000000 00000000 00000001
Resultado: 1
7. Conocimientos adicionales
^ =, | =, & =, << =, >> =, >>> = son casi iguales que sin el signo igual, excepto que se agrega la operación de asignación. Tome >> = como ejemplo:
public class Test {
public static void main(String[] args) {
int num = 2;
System.out.println(num>>=1);
System.out.println(num);
}
/**result:1 1
}
Nota: Dado que hay una operación de asignación, el lado izquierdo del operador no puede ser una constante, por ejemplo, 2 >> = 1 reportará un error.
Los datos almacenados en el cálculo están en forma de complemento.
referencias:
https://www.cnblogs.com/liaopeng/p/8436155.html