2009-10-22 10 views
1

Comment faire exactement cela en C/C++? Disons que je veux déplacer i deux fois vers la gauche et stocker la valeur dans f.Décalage logique à gauche

f = i << 2; 

Est-ce correct?

Je n'ai pas besoin de cela pour un programme ou quoi que ce soit, je suis simplement intéressé par la façon dont cela fonctionne. Merci.

+4

Oui, c'est exactement la façon d'effectuer un décalage de bits vers la gauche. –

+0

Merci beaucoup. – nullArray

Répondre

9

Oui.

f = i << 2 

Les décalages sont utiles dans un certain nombre d'opérations de retordage de bits.

Ceci était une excellente façon de multiplier un nombre par quatre. Cependant, ces jours-ci, l'optimisation des compilateurs a tendance à prendre soin de cela pour vous. Gardez à l'esprit que les deux bits les plus à gauche sont mis au rebut.

+3

Pour les processeurs Intel, le dernier bit décalé hors de l'opérande est stocké dans le drapeau de report. Cela n'ajoute pas vraiment à la discussion pertinente, je voulais juste le dire. – dreamlax

3

Oui, i << 2, f = i << 2 ou f <<= 2 sont toutes choses que l'on pourrait vouloir faire pour déplacer les bits. Plus de choses changement

à garder à l'esprit:

  • vous avez >> aussi bien. Au niveau du bit, >> fonctionne différemment pour les types signés et non signés.

  • la priorité de << et >> est inférieur à celui de + et -, que les sots certaines personnes, comme on pourrait les imaginer être plus comme * et /.

+0

Je sais que c'est si aléatoire, mais je voulais juste vous faire savoir que cette réponse a allumé une ampoule qui m'a aidé à résoudre le bug le plus frustrant que j'ai jamais rencontré lors de l'écriture de code. J'ai changé toutes les instances de caractères signés en caractères non signés, et cela a corrigé l'erreur. – pg1989

5

Comme une note supplémentaire: Même si votre question est marqué C++, il est probablement intéressant de noter que C et C++ ont pris des chemins légèrement différentes en ce qui concerne l'évolution des valeurs négatives. En C++, le résultat de << ou >> sur une valeur négative est défini par l'implémentation. Dans C >> est défini par l'implémentation, tandis que << produit comportement indéfini.

Questions connexes