Explicación detallada del significado de ^, &, | y operadores de bits en JAVA

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

http://www.cnblogs.com/chuijingjing/p/9405598.html

https://blog.csdn.net/tianyeshiye/article/details/80261622

Supongo que te gusta

Origin blog.csdn.net/weixin_48968045/article/details/112298187
Recomendado
Clasificación