28 votes

Comportement de décalage de bits impairs

J'ai le code C suivant qui fonctionne:

 int ex(unsigned int x) {
    int mask  = 0x55555555;
    int a = ((x >> 0) & mask );
    return a + ((x >> 1) & mask );
}
 

Cependant, quand je le développe à ceci, j'obtiens un résultat différent:

 int ex(unsigned int x) {
    int mask  = 0x55555555;
    int a = ((x >> 0) & mask );
    int b = ((x >> 1) & mask );
    return a + b;
}
 

Quelle est la raison de cette différence?

EDIT: Remarque, je compile ceci pour 32 bits.

39voto

alk Points 26509

Quelle est la raison de cette différence?

La 1st - dessous retourne le résultat de l'ajout de deux unsigneds, le résultat étant (implicitement) converti en int.

Le 2ème extrait renvoie le résultat de l'ajout de deux ints .


Plus sur "L'Habitude de l'Arithmétique Conversions":

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X