O artigo anterior abordou os operadores condicionais e este artigo abrange os operadores de turno.
visão geral
Em Java, existem os seguintes operadores de deslocamento:
operador | exemplo de entrada | explicar |
---|---|---|
<< | x << y | Desloca os bits em x para a esquerda em y bits, preenchendo a extremidade direita com 0s. |
>> | x >> y | Desloca os bits em x para a direita em y bits, preenchendo à esquerda com o mesmo sinal do bit mais significativo no momento. |
>>> | x >>> y | Desloca os bits em x para a direita em y bits, preenchendo a esquerda com 0s. |
Nota: Os operadores Shift são usados em valores inteiros.
<<
<< Desloca os bits do operando esquerdo para a esquerda pelos bits do operando direito, deslocar para a esquerda significa multiplicar o valor original por 2 à potência de deslocamento.
gramática:
value<<position
- value representa o valor binário no qual a operação de deslocamento será executada
- position refere-se à posição especificada onde ocorre um deslocamento à esquerda, deslocando os bits para a esquerda nessa posição
Por exemplo:
O número binário do número 5 é 101, e deslocando um bit para a esquerda torna-se 1010, que é 10.
Exemplo de código:
package com.test.javaroads.operator;
/**
* @author: javaroads
* @date: 2022/12/5 11:27
* @description:
*/
public class Nine {
public static void main(String[] args) {
// 数字是5
int num = 5;
// 向左移一位
int result = num << 1;
// 开始执行左移操作
System.out.println("左移操作后:" + result);
}
}
Resultados do:
Vamos explicar graficamente:
>>
Ao contrário de <<, >> desloca os bits do operando esquerdo para a direita pelos bits do operando direito. Deslocamento à direita significa dividir o valor original pela potência de deslocamento de 2. O bit mais à esquerda tem o mesmo sinal do mais significativo bit. A razão para inserir o mesmo sinal como o bit mais significativo é porque o bit mais significativo de um número negativo é 1 na representação de complemento de 2, deslocando o número decimal -4 com o bit mais alto de 1 para a direita e adicionando 0 à esquerda do resultado da operação está incorreto.
Por exemplo:
O número binário do número 32 é 100000, deslocando dois bits para a direita torna-se 1000, que é 8.
Exemplo de código:
package com.test.javaroads.operator;
/**
* @author: javaroads
* @date: 2022/12/5 16:25
* @description:
*/
public class Ten {
public static void main(String[] args) {
// 数字是32
int num = 32;
// 向右移两位
int result = num >> 2;
// 开始执行右移操作
System.out.println("右移操作后:" + result);
}
}
Resultados do:
Vamos explicar graficamente:
O exemplo acima demonstra o caso de um número positivo. Se for um número negativo, por exemplo -32 >> 2
, adivinhe qual é o resultado final?
a resposta é:
>>>
Mova o bit do operando esquerdo para a direita pelo bit do operando direito. >>> Não há distinção entre positivo e negativo no resultado da operação. O operador >>> é usado para operações sem distinção de sinais, também conhecidas como "operador de deslocamento à direita não assinado".
No operador de deslocamento à direita sem sinal, não há diferença de >> no caso de números positivos. No caso de números negativos, 0 será preenchido na extremidade esquerda. Vamos demonstrar com código:
package com.test.javaroads.operator;
/**
* @author: javaroads
* @date: 2022/12/5 16:25
* @description:
*/
public class Ten {
public static void main(String[] args) {
// 数字是32
int num1 = 32;
// 数字是-32
int num2 = -32;
// 向右移两位
int result1 = num1 >>> 2;
int result2 = num2 >>> 2;
// 开始执行右移操作
System.out.println(num1 + "右移操作后:" + result1);
System.out.println(num2 + "右移操作后:" + result2);
}
}
Resultados do:
Pode-se ver que 32 positivo é fácil de entender, então como é o processo -32?
De acordo com minha descrição acima, vamos fazer um desenho para explicar:
De acordo com a imagem acima, deve ser fácil de entender!