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,
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.
UNE REPONSE UTILE : &|| UN PROBLEME RESOLU :
Bonjour,
En compilant avec gcc ce code :
J'obtiens bien 32.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 c : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 int d = 5; printf("%d", 1<d);
Mon Tutoriel sur la programmation «Python»
Mon Tutoriel sur la programmation «Shell»
Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
Et on poste ses codes entre balises [code] et [/code]
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));.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.Affichera 1 et là, ce sera tout à fait normal...
Publication : Concepts en C
Mon avatar : Glenn Gould
--------------------------------------------------------------------------
Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager