Olá Pessoal, tudo bom?
Continuando nossa descrição básica sobre os operadores no Java, hoje é dia de falar sobre o operador bit shift right. A décima terceira parte desse artigo se encontra aqui. Confira na continuação desse artigo sobre o operador bit shift right:
Operador Bit Shift Right
O operador bit shift right é definido pelo símbolo abaixo:
Operador | Descrição |
---|---|
>> | Operador Bit Shift para preenchimento de zeros ou um a esquerda, dependendo do bit mais significativo, quantos bits forem informados pelo operador 2 |
Normalmente o Bit 1 pertence a uma instância que representa o valor (flag) a ser modificado e o Bit 2 é a quantidade de casas binárias que o shift irá percorrer:
1 2 3 4 |
1 0 0 1 0 1 1 1 (Flag) >> 1 (Bitmask) --------------- 1 1 0 0 1 0 1 1 (Resultado da operacao) |
Note que o bit 1 que estava mais a direita foi removido e em seu lugar foi inserido um bit um no bit mais a esquerda. Todos os outros bits foram movidos 1 casa binária para a direita. Caso o bit mais significativo não fosse 1 mas 0, ocorreria o seguinte resultado:
1 2 3 4 |
0 1 0 0 1 0 1 1 (Flag) >> 1 (Bitmask) --------------- 0 0 1 0 0 1 0 1 (Resultado da operacao) |
Abaixo temos uma classe de exemplo que trabalha com o operador bit shift right:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
package br.com.mauda.operadores; public class OperadorBitShiftRight { public static void main(String[] args) { int bitmask = 0x000F; //Em binario 0000 0000 0000 1111 int flag = 1; // =================== //Em binario 0000 0000 0000 0111 System.out.println("Valor Original do bitmask: " + bitmask); System.out.println("Valor Original do bitmask em binário: " + Integer.toBinaryString(bitmask)); Integer resultado = bitmask >> flag; System.out.println("\nResultado da operacao bit shift right 1: " + resultado); System.out.println("Resultado da operacao bit shift right 1 em binario: " + Integer.toBinaryString(resultado)); bitmask = 0x000F; //Em binario 0000 0000 0000 1111 flag = 2; // =================== //Em binario 0000 0000 0000 0011 resultado = bitmask >> flag; System.out.println("\nResultado da operacao bit shift right 2: " + resultado); System.out.println("Resultado da operacao bit shift right 2 em binario: " + Integer.toBinaryString(resultado)); } } |
O resultado da execução dessa classe será o seguinte:
1 2 3 4 5 6 7 8 |
Valor Original do bitmask: 15 Valor Original do bitmask em binário: 1111 Resultado da operacao bit shift right 1: 7 Resultado da operacao bit shift right 1 em binario: 111 Resultado da operacao bit shift right 2: 3 Resultado da operacao bit shift right 2 em binario: 11 |
É interessante notar ainda que os valores foram dividos por 2, mas como era impar e inteiro, o número foi truncado. Perceba que nesse exemplo o bit mais significativo era Zero, o qual foi propagado para a direita. Vamos ver um exemplo agora com um número negativo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
package br.com.mauda.operadores; public class OperadorBitShiftRightNegativo { public static void main(String[] args) { int bitmask = 0xF000000F; int flag = 1; System.out.println("Valor Original do bitmask: " + bitmask); System.out.println("Valor Original do bitmask em binário: " + Integer.toBinaryString(bitmask)); Integer resultado = bitmask >> flag; System.out.println("\nResultado da operacao bit shift right 1: " + resultado); System.out.println("Resultado da operacao bit shift right 1 em binario: " + Integer.toBinaryString(resultado)); flag = 2; resultado = bitmask >> flag; System.out.println("\nResultado da operacao bit shift right 2: " + resultado); System.out.println("Resultado da operacao bit shift right 2 em binario: " + Integer.toBinaryString(resultado)); flag = 3; resultado = bitmask >> flag; System.out.println("\nResultado da operacao bit shift right 3: " + resultado); System.out.println("Resultado da operacao bit shift right 3 em binario: " + Integer.toBinaryString(resultado)); flag = 4; resultado = bitmask >> flag; System.out.println("\nResultado da operacao bit shift right 4: " + resultado); System.out.println("Resultado da operacao bit shift right 4 em binario: " + Integer.toBinaryString(resultado)); flag = 5; resultado = bitmask >> flag; System.out.println("\nResultado da operacao bit shift right 5: " + resultado); System.out.println("Resultado da operacao bit shift right 5 em binario: " + Integer.toBinaryString(resultado)); } } |
O resultado da execução dessa classe será o seguinte:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Valor Original do bitmask: -268435441 Valor Original do bitmask em binário: 11110000000000000000000000001111 Resultado da operacao bit shift right 1: -134217721 Resultado da operacao bit shift right 1 em binario: 11111000000000000000000000000111 Resultado da operacao bit shift right 2: -67108861 Resultado da operacao bit shift right 2 em binario: 11111100000000000000000000000011 Resultado da operacao bit shift right 3: -33554431 Resultado da operacao bit shift right 3 em binario: 11111110000000000000000000000001 Resultado da operacao bit shift right 4: -16777216 Resultado da operacao bit shift right 4 em binario: 11111111000000000000000000000000 Resultado da operacao bit shift right 5: -8388608 Resultado da operacao bit shift right 5 em binario: 11111111100000000000000000000000 |
Precedência dos Operadores
Continuando a formular a tabela de precedência, agora segue o operador bit shift right está junto com o operador bit shift left e abaixo dos operadores aditivos, assim verifique a tabela abaixo:
Ordem | Tipo de Operador | Precedência |
---|---|---|
1 | Pós Fixo | expr++ expr– |
2 | Pré fixo e Unário | ++expr –expr +expr -expr ~ ! |
3 | Multiplicativo | * / % |
4 | Aditivo | + – |
5 | Shift | << >> |
6 | Relacional | > >= <= < instanceof |
7 | Igualdade | == != |
8 | Bitwise AND | & |
9 | Bitwise exclusive OR | ^ |
10 | Bitwise inclusive OR | | |
11 | AND Lógico | && |
12 | OR Lógico | || |
13 | Ternário | ? : |
14 | Atribuição | = += -= *= /= %= |
finnaly{
Duvidas ou sugestões? Deixe seu feedback! Isso ajuda a saber a sua opinião sobre os artigos e melhorá-los para o futuro! Isso é muito importante!
Até um próximo post!
Leave a Reply