Explicação detalhada do significado de ^, &, | e operadores de bits em JAVA

1. ^ (operador OU exclusivo)

^ É um operador binário para binário. Regras de operação: Se dois valores binários são iguais no mesmo bit, o bit no resultado é 0, caso contrário, é 1, como 1011 & 0010 = 1001.

2. | (ou operador)

| É um operador binário para binário. Regras de operação: Se dois valores binários tiverem pelo menos um 1 no mesmo bit, o bit no resultado é 1, caso contrário, é 0, como 1011 e 0010 = 1011.

3. & (e operador)

& É um operador binário para binário. Deve-se notar que && é um identificador que representa "e" entre as condições de julgamento em java, & é um operador binário, se dois valores binários forem ambos 1 no mesmo bit, o bit no resultado será 1, caso contrário, for 0, pode-se considerar que ambos são verdadeiros (1) e o resultado também é verdadeiro (1), como 1011 & 0110 = 0010.

& Existe também um local mais importante, que também é um problema comum nas entrevistas, ou seja, a operadora pode calcular o restante. Sabemos que a mais lenta das quatro operações aritméticas é a divisão, e a operação do restante é ainda mais lenta, então você pode usar & para encontrar rapidamente o restante dos dois números. Vejamos um exemplo:

public ModTest{
    public static void main(String[] args){
        System.out.println(45 & 11);
        System.out.println(45 & 7);
    }
    /**result:3, 5*/
}

Dados dois valores de xey, se você quiser encontrar o resto de xey, você só precisa de x & (y-1). Conforme mostrado no exemplo acima, se você quiser encontrar o resto de 45 e 12 (45 e 8), você só precisa de 45 e 11 (45 e 7).


Os três operadores a seguir são operadores bit a bit

>> x (constante): move para a direita em x bits (o vértice se move em que direção), se o número for positivo, o bit superior (mais à esquerda) é preenchido com x zeros, se for um número negativo, o topo bit é preenchido com x One.

<< x (constante): Mova x bits para a esquerda (o vértice se move em qual direção), não importa o bit inferior (mais à direita) do número positivo ou negativo, adicione x zeros.

<<<: Não existe tal representação.

>>> x (constante): Indica deslocamento para a direita sem sinal em x bits. O chamado sem sinal é comparado com >> x. Após esta operação, não importa o bit superior (mais à esquerda) do número positivo ou negativo é movido, 0 Está adicionado.

4. << (operador de deslocamento à esquerda)

Exemplo 1: -20 << 2

Código original: 10000000 00000000 00000000 00010100

Código inverso: 11111111 11111111 11111111 11101011 (o bit de sinal permanece inalterado, os outros bits são invertidos)

Código do complemento: 11111111 11111111 11111111 11101100 (código inverso + 1)

Mova dois dígitos para a esquerda (adicione 0 aos dois dígitos da extrema direita)

Complemento: 11111111 11111111 11111111 10110000

Código inverso: 11111111 11111111 11111111 10101111 (complemento-1)

Código original: 10000000 00000000 00000000 01010000 (o bit de sinal permanece inalterado, os outros bits são invertidos)

Resultado: -80

Exemplo 2: 20 << 2

Código original (código inverso, código de complemento): 00000000 00000000 00000000 00010100

Mova dois dígitos para a esquerda (adicione 0 aos dois dígitos da extrema direita)

Código original (código inverso, código de complemento): 00000000 00000000 00000000 01010000

Resultados: 80

5. >> (deslocar o operador para a direita)

Exemplo 1: -20 >> 2

Código original: 10000000 00000000 00000000 00010100

Código inverso: 11111111 11111111 11111111 11101011 (o bit de sinal permanece inalterado, os outros bits são invertidos)

Código do complemento: 11111111 11111111 11111111 11101100 (código inverso + 1)

Mova dois bits para a direita (adicione 1 aos dois bits mais à esquerda)

Complemento: 11111111 11111111 11111111 11111011

Código inverso: 11111111 11111111 11111111 11111010 (complemento-1)

Código original: 10000000 00000000 00000000 00000101 (o bit de sinal permanece inalterado, os outros bits são invertidos)

Resultado: -5

Exemplo 2: 20 >> 2

Código original (código inverso, código de complemento): 00000000 00000000 00000000 00010100

Mova dois bits para a direita (adicione 0 aos dois bits mais à esquerda)

Código original (código inverso, código de complemento): 00000000 00000000 00000000 00000101

Resultado: 5

6. >>> (operador de deslocamento à direita sem sinal)

Exemplo 1: -2 >>> 1

Código original: 10000000 00000000 00000000 00000010

Código inverso: 11111111 11111111 11111111 11111101 (bit de sinal permanece inalterado, outros bits são invertidos)

Código de complemento: 11111111 11111111 11111111 11111110 (código inverso + 1)

Deslocar 1 bit para a direita (operador de bit sem sinal, adicione apenas 0 ao bit mais à esquerda)

Complemento: 01111111 11111111 11111111 11111111

Código inverso: 01111111 11111111 11111111 11111111 (o bit alto é 0, número positivo)

Código original: 01111111 11111111 11111111 11111111 (igual ao código inverso)

Resultado: 2147483647

Exemplo 2: 2 >>> 1

Código original (código inverso, código complementar): 00000000 00000000 00000000 00000010

Mova um bit para a direita (adicione 0 ao bit mais à esquerda)

Código original (código inverso, código de complemento): 00000000 00000000 00000000 00000001

Resultado: 1

7. Conhecimento adicional

^ =, | =, & =, << =, >> =, >>> = são quase os mesmos que sem o sinal de igual, exceto que a operação de atribuição é adicionada. Veja >> = como exemplo:

public class Test {
	public static void main(String[] args) {
		int num = 2;
		System.out.println(num>>=1);
        System.out.println(num);
	}
    /**result:1  1

}

Observação: como há uma operação de atribuição, o lado esquerdo do operador não pode ser uma constante, por exemplo, 2 >> = 1 reportará um erro.

Os dados armazenados no cálculo estão na forma de complemento

 

referências:

https://www.cnblogs.com/liaopeng/p/8436155.html

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

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

Acho que você gosta

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