Arithmétique des ordinateurs

Quelle expression calcule correctement la multiplication d'un entier x par 10 au moyen de décalages et d'additions, sans instruction de multiplication ?

  1. A(x << 3) + (x << 1)
  2. B(x << 10)
  3. C(x << 2) + x
Afficher la réponse et l'explication

Réponse : A. (x << 3) + (x << 1)

Un décalage d'un bit vers la gauche multiplie par 2 : x << 3 vaut 8 fois x et x << 1 vaut 2 fois x. Comme 8x + 2x = 10x, (x << 3) + (x << 1) donne la multiplication par 10. Les multiplications par une constante peuvent ainsi être remplacées par des combinaisons de décalages et d'additions, et les compilateurs choisissent la forme la plus rapide. x << 10 multiplie par 2¹⁰ = 1024, et (x << 2) + x donne 4x + x, soit 5 fois x. Il faut éviter de confondre le nombre de bits de décalage avec le facteur 10.

S'entraîner sur ce thème Retour au thème

Autres questions sur Arithmétique des ordinateurs

  1. Pourquoi un diviseur entier classique (à restauration ou sans restauration, calculant le quotient bit par bit) est-il généralement plus lent qu'un multiplieur ?
  2. Quel est le résultat du décalage arithmétique d'un bit vers la droite de −8 (1111 1000) en entier signé sur 8 bits ?
  3. En langage C, quelle combinaison des résultats de −7 / 2 et de −7 >> 1 (décalage arithmétique à droite) en type int est correcte ?
  4. En langage C, quel est le résultat de la soustraction de 1 à 0 pour un entier non signé de 32 bits (unsigned int) ?
  5. Pour l'addition de deux entiers non signés, quelle méthode détermine correctement que le résultat a dépassé la plage représentable (débordement) ?