• Skip to primary navigation
  • Skip to content

Mauda

IT, Java and Music

Graduação   SCJP   Mestrado
  • Apresentação
  • Certificação Java
  • JPA
    • Exceptions
  • JSF
  • Versionamento
  • Contato

Operadores no Java – Bit Shift Left

January 2, 2017 by Mauda Leave a Comment

Conteúdo do Post:
  1. Operador Bit Shift Left
  2. Precedência dos Operadores
  3. finnaly{

Olá Pessoal, tudo bom?

Continuando nossa descrição básica sobre os operadores no Java, hoje é dia de falar sobre o operador bit shift left. A décima segunda parte desse artigo se encontra aqui. Confira na continuação desse artigo sobre o operador bit shift left:

Operador Bit Shift Left

O operador bit shift left é definido pelo símbolo abaixo:

Operador Descrição
<< Operador Bit Shift Left para preenchimento de zeros a direita, 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:

Java
1
2
3
4
      1 0 0 1 0 1 1 1     (Flag)
<<                  1     (Bitmask)
      ---------------
      0 0 1 0 1 1 1 0    (Resultado da operacao)

Note que o bit 1 que estava mais a esquerda foi removido e em seu lugar foi inserido um zero no bit mais a direita. Todos os outros bits foram movidos 1 casa binária para a esquerda.

Abaixo temos uma classe de exemplo que trabalha com o operador bit shift left :

Java
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 OperadorBitShiftLeft {
public static void main(String[] args) {
int bitmask = 0x000F; //Em binario 0000 0000 0000 1111
int flag    = 1;
              //           ===================
                      //Em binario 0000 0000 0001 1110
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 left 1: " + resultado);
System.out.println("Resultado da operacao bit shift left 1 em binario: " + Integer.toBinaryString(resultado));
bitmask = 0x000F;     //Em binario 0000 0000 0000 1111
flag    = 2;
                      //           ===================
                      //Em binario 0000 0000 0011 1100
resultado = bitmask << flag;
System.out.println("\nResultado da operacao bit shift left 2: " + resultado);
System.out.println("Resultado da operacao bit shift left 2 em binario: " + Integer.toBinaryString(resultado));
}
}

O resultado da execução dessa classe será o seguinte:

Java
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 left 1: 30
Resultado da operacao bit shift left 1 em binario: 11110
 
Resultado da operacao bit shift left 2: 60
Resultado da operacao bit shift left 2 em binario: 111100

É interessante notar ainda que os valores foram multiplicados por 2. O valor do bitmask original era 15, após o primeiro shift passou para 30 e após o shift 2 passou para 60. Mas isso não quer dizer que você poderá substituir o shift nas operações de multiplicação. Lembre-se que se for um valor negativo isso não dará resultados corretos, pois em um momento irá cortar o bit mais significativo, que justamente representa o valor negativo. Veja no exemplo abaixo com um numero negativo, percebendo que a partir do shift 4 já ocorrem “erros”:

Java
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 OperadorBitShiftLeftNegativo {
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 left 1: " + resultado);
System.out.println("Resultado da operacao bit shift left 1 em binario: " + Integer.toBinaryString(resultado));
flag = 2;
resultado = bitmask << flag;
System.out.println("\nResultado da operacao bit shift left 2: " + resultado);
System.out.println("Resultado da operacao bit shift left 2 em binario: " + Integer.toBinaryString(resultado));
flag = 3;
resultado = bitmask << flag;
System.out.println("\nResultado da operacao bit shift left 3: " + resultado);
System.out.println("Resultado da operacao bit shift left 3 em binario: " + Integer.toBinaryString(resultado));
flag = 4;
resultado = bitmask << flag;
System.out.println("\nResultado da operacao bit shift left 4: " + resultado);
System.out.println("Resultado da operacao bit shift left 4 em binario: " + Integer.toBinaryString(resultado));
flag = 5;
resultado = bitmask << flag;
System.out.println("\nResultado da operacao bit shift left 5: " + resultado);
System.out.println("Resultado da operacao bit shift left 5 em binario: " + Integer.toBinaryString(resultado));
}
}

O resultado da execução dessa classe será o seguinte:

Java
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 left 1: -536870882
Resultado da operacao bit shift left 1 em binario: 11100000000000000000000000011110
 
Resultado da operacao bit shift left 2: -1073741764
Resultado da operacao bit shift left 2 em binario: 11000000000000000000000000111100
 
Resultado da operacao bit shift left 3: -2147483528
Resultado da operacao bit shift left 3 em binario: 10000000000000000000000001111000
 
Resultado da operacao bit shift left 4: 240
Resultado da operacao bit shift left 4 em binario: 11110000
 
Resultado da operacao bit shift left 5: 480
Resultado da operacao bit shift left 5 em binario: 111100000

Precedência dos Operadores

Continuando a formular a tabela de precedência, agora segue o operador bit shift left, o qual está 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!

Filed Under: Java, Operadores Tagged With: bitshift, int, left, long

About Mauda

Mestre em Informática, Analista de Sistemas, Professor, SCJP e Baterista. Desde 2002 trabalhando no mundo Java e ensinando pessoas sobre desenvolvimento de sistemas. Mais informações

Reader Interactions

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Advertisements

Copyright © 2025 · Genesis Framework · WordPress · Log in