Habilidades de programação em linguagem C --- Comparação de shift à esquerda, shift à direita e multiplicação e divisão na linguagem C

Comparação de deslocamento à direita e divisão na linguagem C

        Ao trabalhar em um projeto recentemente, encontrei um fenômeno interessante. Ou seja, para a operação de divisão por uma potência inteira de 2, para agilizar o cálculo, em geral, será utilizado o deslocamento à direita (>>) ao invés da divisão (/). Mas, na verdade, no VS, o deslocamento para a direita equivale à operação floor (piso) no matlab, ou seja, arredondamento para o infinito negativo .

Parte I: Divisão e deslocamento à direita

Primeiro, observe o caso em que o dividendo é negativo:

1,-3/2 = -1,5

Para a divisão, -3/2 é igual a -1, o que equivale a truncar diretamente as casas decimais sem arredondamento.

Para deslocamento à direita, -3>>1 é igual a -2, possivelmente com arredondamento (-0,5), possivelmente com arredondamento para menos infinito -Inf, mas sem truncamento.

2,-7/4 = -1,75

Para divisão, -7/4 é igual a -1 e, novamente, as casas decimais são truncadas diretamente, sem arredondamento.

Para deslocamento à direita, -7>>2 é igual a -2, possivelmente com arredondamento (-0,75), possivelmente com arredondamento para menos infinito -Inf, mas sem truncamento.

3,-5/4 = -1,25

Para divisão, -5/4 é igual a -1, que é truncado diretamente.

Para o deslocamento à direita, -5>>2 é igual a -2, o que prova que o cálculo anterior não é arredondado (-0,25), e deve ser arredondado para o infinito negativo -Inf, que equivale ao chão no matlab.

Resumo: No caso em que o dividendo é negativo, o deslocamento à direita não é equivalente à divisão. A divisão trunca diretamente a parte decimal, enquanto o deslocamento à direita é o piso.

Quando o dividendo é um número positivo:

1,3/2 = 1,5

Para a divisão, 3/2 é igual a 1, que é o mesmo que o resultado do dividendo ser um número negativo, a única diferença é o sinal, que ainda está truncado.

Para deslocamento à direita, 3>>1 é igual a 1, que é diferente do resultado de um dividendo negativo. De 1,5 para 1, prova mais uma vez que o método de deslocamento para a direita é o arredondamento para o infinito negativo-Inf.

2,7/4 = 1,75

Para a divisão, 7/4 é igual a 1, que é diretamente truncado. Mesmo resultado de um dividendo negativo, exceto por um sinal diferente.

Para deslocamento à direita, 7>>2 é igual a 2, de 1,75 a 1, arredondado para infinito negativo -Inf.

3,5/4 = 1,25

Para a divisão, 5/4 é igual a 1, truncado diretamente, e o resultado é o mesmo que o dividendo é negativo.

Para deslocamento à direita, -5>>2 é igual a -2, de 1,25 a 1, que é equivalente ao piso, arredondado para o infinito negativo -Inf.

Resumo: No caso em que o dividendo é positivo, o resultado do deslocamento à direita é igual à divisão. Para números positivos, o efeito do truncamento direto por divisão é equivalente ao arredondamento para -inf.

Resumir:

        Para a divisão, o resultado é o mesmo, seja o dividendo positivo ou negativo. Para o deslocamento à direita, o resultado é diferente quando o dividendo é positivo e negativo.

Parte II: Multiplicação e Deslocamento à Esquerda

        Como não há decimais no cálculo da multiplicação, os resultados do deslocamento à esquerda e da multiplicação são os mesmos para números positivos e negativos.


 (texto completo)

Autor --- Panasonic J27

 (A imagem que acompanha não tem nada a ver com este artigo)

Declaração de direitos autorais: Algumas imagens, textos ou outros materiais neste artigo podem vir de muitos sites e descrições diferentes, por isso não posso listá-los aqui. Se houver alguma violação, informe-me e exclua-a imediatamente. Todos são bem-vindos para reimprimir, mas se alguém citar ou copiar meu artigo, você deve indicar em seu artigo que as imagens ou o texto que você usa vêm de meu artigo, caso contrário, a infração será investigada. ----Panasonic J27
 

Acho que você gosta

Origin blog.csdn.net/daduzimama/article/details/130382263
Recomendado
Clasificación