Olá Pessoal, tudo bom?
Continuando nossa descrição básica sobre os operadores no Java, hoje é dia de falar sobre o operador unsigned bit shift right. A décima quarta parte desse artigo se encontra aqui. Confira na continuação desse artigo sobre o operador unsigned bit shift right:
Operador Unsigned Bit Shift Right
O operador unsignedbit shift right é definido pelo símbolo abaixo:
Operador | Descrição |
---|---|
>>> | Operador Bit Shift para preenchimento de zeros a esquerda, 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) --------------- 0 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 zero 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 unsigned 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 OperadorUnsignedBitShiftRight { 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 unsigned bit shift right 1: " + resultado); System.out.println("Resultado da operacao unsigned 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 unsigned bit shift right 2: " + resultado); System.out.println("Resultado da operacao unsigned 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 unsigned bit shift right 1: 7 Resultado da operacao unsigned bit shift right 1 em binario: 111 Resultado da operacao unsigned bit shift right 2: 3 Resultado da operacao unsigned bit shift right 2 em binario: 11 |
Para um valor com o bit mais significativo zero, a execução ocorre igual a operação de bit shift right. Já com um valor com o bit mais significativo igual a um (número negativo), iremos ter uma diferença na execução, pois na primeira execução o valor já passará a ser positivo. Vamos ver um exemplo 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 OperadorUnsignedBitShiftRightNegativo { 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 unsigned bit shift right 1: " + resultado); System.out.println("Resultado da operacao unsigned bit shift right 1 em binario: " + Integer.toBinaryString(resultado)); flag = 2; resultado = bitmask >>> flag; System.out.println("\nResultado da operacao unsigned bit shift right 2: " + resultado); System.out.println("Resultado da operacao unsigned bit shift right 2 em binario: " + Integer.toBinaryString(resultado)); flag = 3; resultado = bitmask >>> flag; System.out.println("\nResultado da operacao unsigned bit shift right 3: " + resultado); System.out.println("Resultado da operacao unsigned bit shift right 3 em binario: " + Integer.toBinaryString(resultado)); flag = 4; resultado = bitmask >>> flag; System.out.println("\nResultado da operacao unsigned bit shift right 4: " + resultado); System.out.println("Resultado da operacao unsigned bit shift right 4 em binario: " + Integer.toBinaryString(resultado)); flag = 5; resultado = bitmask >>> flag; System.out.println("\nResultado da operacao unsigned bit shift right 5: " + resultado); System.out.println("Resultado da operacao unsigned 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 unsigned bit shift right 1: 2013265927 Resultado da operacao unsigned bit shift right 1 em binario: 1111000000000000000000000000111 Resultado da operacao unsigned bit shift right 2: 1006632963 Resultado da operacao unsigned bit shift right 2 em binario: 111100000000000000000000000011 Resultado da operacao unsigned bit shift right 3: 503316481 Resultado da operacao unsigned bit shift right 3 em binario: 11110000000000000000000000001 Resultado da operacao unsigned bit shift right 4: 251658240 Resultado da operacao unsigned bit shift right 4 em binario: 1111000000000000000000000000 Resultado da operacao unsigned bit shift right 5: 125829120 Resultado da operacao unsigned bit shift right 5 em binario: 111100000000000000000000000 |
Precedência dos Operadores
Continuando a formular a tabela de precedência, agora segue o operador unsigned bit shift right está junto com o operador bit shift left e o operador bit shift right, logo 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