Ir ao conteúdo

Posts recomendados

Postado

Caros amigos.

Dentre as duas operações qual consome mais tempo de processamento: divisão "/" ou deslocamento de bits ">>" ?

Um exemplo:

 

high_byte= (byte)(word_val / 256);
low_byte = (byte)(word_val & 0xFF);

//ou

high_byte= (byte)(word_val >> 8);
low_byte = (byte)(word_val & 0xFF);

 

Postado

Pra essa pergunta você precisa saber onde você está rodando esse código.

Adiantando algumas coisas, você só verá diferenças se estiver trabalhando num ambiente que cada ciclo de clock tem que ser preciso para uma aplicação. Se seu sistema rodar em cima de um sistema operacional, não vai ser uma divisão ou >> que vai mudar o desempenho do seu código.

Para explicar um pouco melhor, vamos aos tempos jurássico haha, Assembly.

 

Diferentes microprocessadores têm suas instruções em assembly para realizar comandos.

Se não me engano arquitetura x86 tem um opcode para divisão de 32 bits, o que acontece, você consegue fazer a divisão com um único comando, quando seu prorgama for compilado a instrução será apenas uma.

Mesmo quando o processador tem uma instrução para divisão, ela pode levar mais ciclos de clock para ser realizada. Algumas instruções pegam mais ciclos de clock que outras.

Se você está num x86, provavelmente estará rodando seu código em um sistema operacional, então prever a diferença de uma divisão e um deslocamento de bit é bastante difícil. Operações de deslocamento de bits tendem a ser mais simples por questões de portas lógicas, mas bons compiladores já lêem 256 = 2^8 e mesmo fazendo divisão por 256 ele transforma pra >> 8.

 

Mas em alguns casos como msp430, um microcontrolador de baixo consumo não tem um comando para divisão, ela é implementada com conjunto de instruções, enquanto há a instrução de deslocamento de bits, que gasta no máximo 3 ciclos de clock, senão me engano. Ou seja, nesse caso fazer uma divisão gastaria vários comandos que por sua vez, cada comando gastaria 3 ciclos de clock do processador, enquanto você poderia usar apenas um comando.

Claro, isso também vale a ideia do x86, bons compiladores podem perceber / 256 = >> 8 e já substituem durante a compilação.

 

Em fim, use o que convier em cada caso, você que de fato deslocar bits? Use o >>. Você quer dividir por 256, mesmo que seja equivalente a >> 8? Use /256 para deixar seu código mais legível e fácil de entender. Isso só terá diferença, como eu disse, em aplicações que precisam de uma perfeita sincronia de clock.

  • Curtir 1
Postado
Em 22/04/2017 às 16:29, Júnio Teixeira disse:

divisão, ela pode levar mais ciclos de clock para ser realizada

 

Em 22/04/2017 às 16:29, Júnio Teixeira disse:

deslocamento de bits, que gasta no máximo 3 ciclos de clock

Muito obrigado, era dessas informações que eu precisava.

:aplausos:

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!