Bonjour,
Je souhaiterais faire un décalage variable mais écrit de cette façon cela ne marche pas, est ce normal ?
int d = 5;
printf("%d", 1<<d); //Affiche 1 au lieu de 32 si "1 << 5.
Cordialement.
Version imprimable
Bonjour,
Je souhaiterais faire un décalage variable mais écrit de cette façon cela ne marche pas, est ce normal ?
int d = 5;
printf("%d", 1<<d); //Affiche 1 au lieu de 32 si "1 << 5.
Cordialement.
Bonjour,
En compilant avec gcc ce code :
J'obtiens bien 32.Code:
1
2
3
4
5
6
7
8 #include<stdio.h> int main(void) { int d = 5; printf("%d", 1<<d); return 0; }
As-tu essayé de faire :
Puis d'utiliser un debogueur pour suivre la valeur de tes variables en exécutant pas à pas?Code:
1
2
3 int d = 5; int tmp = 1<<d; printf("%d", tmp);
Bonjour
Absolument pas. Le compilo est sensé connaitre les priorités des opérateurs et le décalage "<<" est bien plus prioritaire que le séquentiel "," donc le 1 << d doit se faire avant.
Peut-être pourrais-tu poster un code complet minimaliste compilable qui produit chez-toi ce résultat. Eventuellement nous donner ta plateforme de travail et le nom du compilateur. Eventuellement réessayer avec un autre compilo connu (style MinGW sous Windows ou gcc sous Linux).
Je dis ça pour la forme car bien entendu je pense quand-même fortement à une erreur de l'ICC. Par exemple ce code
Affichera 1 et là, ce sera tout à fait normal...Code:
1
2 int d = 5; printf("%d", 1<d);
Juste pour dire que dans l'expression printf("%d", 1<<d) la virgule n'est pas l'opérateur virgule mais un simple séparateur d'argument. Si on veut mettre l'opérateur virgule dans une liste d'argument, il faut parenthèser. Par exemple : fonc((a, b));.Citation:
Absolument pas. Le compilo est sensé connaitre les priorités des opérateurs et le décalage "<<" est bien plus prioritaire que le séquentiel "," donc le 1 << d doit se faire avant.
C'est vrai que cette erreur est fortement plausible dans ce cas.Citation:
Affichera 1 et là, ce sera tout à fait normal...