Da mesma forma que o artigo anterior, tenho acompanhado em vários fóruns e vejo que ainda muita gente não conhece a utilidade dos operadores << e >>, portanto irei explicar nesse artigo.

Esses operadores que muita gente já viu em diversos códigos, porem nunca soube para que realmente servia, vou explica-lo de uma forma breve e simplificada.

Esses operadores de shift register, ou seja, eles realizam o deslocamento dos bits dentro do registrador, isso pensando em baixo nível ou o deslocamento de bits na variável pensando em linguagens de mais alto nivel como a linguagem C.

O operador << é o que realiza o shift(deslocamento) para a esquerda, como no exemplo a seguir.
Segue o código:

variavel = 1<<3; // Isso realiza o deslocamento do numero binário 00000001 em 3 posições, resultando em 00001000 em binário ou 0x80 em hexadecimal ou ainda 128 em decimal

 

Já o operador >> é o que realiza o shift(deslocamento) para a direita, como no exemplo a seguir.
Segue o código:

variavel = 0x80>>3; // Isso realiza o deslocamento do numero binário 10000000 em 3 posições, resultando em 00010000 em binário ou 0x10 em hexadecimal ou ainda 256 em decimal

Esses são exemplos onde somente um bit está em modo 1, porem todos os bits seguem a mesma lógica.Por exemplo:

variavel = 0x55<<3; // Isso realiza o deslocamento do numero binário 01010101 em 3 posições, resultando em 10101000 em binário ou 0xA8 em hexadecimal ou ainda 168 em decimal, pois a variavel por ser de 8 bits tem seu valor truncado.

variavel = 0x55>>3; // Isso realiza o deslocamento do numero binário 01010101 em 3 posições, resultando em 00001010 em binário ou 0x0A em hexadecimal ou ainda 10 em decimal

Obs: Em números positivos e negativos com deslocamento a esquerda as lacunas de deslocamento são preenchidas com 0, somente negativos com deslocamento à direita é preenchida com 1.

Não sei se você notou, mas também é possível a realização de cálculos com esses operadores como vou demonstrar a seguir.

Caso queira realizar multiplicações ou ainda divisões por exponenciais de 2 é mais eficiente realizar os deslocamentos das variáveis.

Para multiplicações utilize o operador << (shift esquerda)

Para divisões utilize o operador << (shift direita)

Exemplo:

Necessito realizar a multiplicação de uma variável por 8, posso realiza-la da seguinte forma:

variavel = variavel * 8; // menos eficiente pensando em código assembler

variavel = variavel << 3; // mais eficiente, já que 2 elevado a 3 é 8

Necessito realizar a divisão de uma variável por 16, posso realiza-la da seguinte forma:

variavel = variavel / 16; // menos eficiente pensando em código assembler, pois divisão na maioria dos microcontroladores é feita em cima de funções complexas.

variavel = variavel >> 4; // mais eficiente, já que 2 elevado a 4 é 16

Caso tenha alguma duvida, deixe seu comentário
Espero ter ajudado a esclarecer como funciona esse operador e caso tenha alguma duvida em outros operadores deixe nos comentários para que eu possa escrever outros artigos.


Obrigado e até o próximo post.

DATEK Tecnologia Eletrônica
[C] Operador > em Linguagem C
Tags:                     

Deixe uma resposta

%d blogueiros gostam disto: