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