Précédent   Forum du club des développeurs et IT Pro > C et C++ > C > Débuter
Débuter Forum d'entraide pour débuter en langage C. Avant de poster -> FAQ C
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 20/11/2012, 15h12   #1
darkwall_37
Membre éclairé
 
Homme Alex V
Etudiant administrateur systèmes et réseaux
Inscription : octobre 2007
Messages : 609
Détails du profil
Informations personnelles :
Nom : Homme Alex V
Âge : 24
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Etudiant administrateur systèmes et réseaux

Informations forums :
Inscription : octobre 2007
Messages : 609
Points : 378
Points : 378
Par défaut Décalage << variable

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.
darkwall_37 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2012, 15h49   #2
Neckara
Rédacteur
 
Avatar de Neckara
 
Homme Denis
Étudiant
Inscription : décembre 2011
Messages : 2 612
Détails du profil
Informations personnelles :
Nom : Homme Denis
Localisation : France, Loire (Rhône Alpes)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : décembre 2011
Messages : 2 612
Points : 7 162
Points : 7 162
Envoyer un message via MSN à Neckara Envoyer un message via Skype™ à Neckara
Bonjour,

En compilant avec gcc ce code :
Code :
1
2
3
4
5
6
7
8
#include<stdio.h>
 
int main(void)
{
     int d = 5;
     printf("%d", 1<<d);
     return 0;
}
J'obtiens bien 32.
As-tu essayé de faire :
Code :
1
2
3
     int d = 5;
     int tmp = 1<<d;
     printf("%d", tmp);
Puis d'utiliser un debogueur pour suivre la valeur de tes variables en exécutant pas à pas?
__________________
Recherche devs C++ motivés et sérieux pour Last Dungeon.

Chaîne Youtube : Vidéos

Ma page DVP : http://neckara.developpez.com/
Neckara est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2012, 08h58   #3
Sve@r
Expert Confirmé Sénior
 
Avatar de Sve@r
 
Homme Frédéric
Ingénieur développement logiciels
Inscription : février 2006
Messages : 3 497
Détails du profil
Informations personnelles :
Nom : Homme Frédéric
Âge : 45
Localisation : France, Oise (Picardie)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 3 497
Points : 6 614
Points : 6 614
Citation:
Envoyé par darkwall_37 Voir le message
Bonjour,

Je souhaiterais faire un décalage variable mais écrit de cette façon cela ne marche pas

Code c :
1
2
int d = 5;
printf("%d", 1<<d); //Affiche 1 au lieu de 32 si "1 << 5.

, est ce normal ?
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
Code c :
1
2
int d = 5;
printf("%d", 1<d);
Affichera 1 et là, ce sera tout à fait normal...
__________________
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Tout ce qu'un individu reçoit sans rien faire pour l'obtenir, un autre individu a dû travailler pour le produire sans en tirer profit.
Tout Pouvoir ne peut distribuer aux uns que ce qu'il a préalablement confisqué à d'autres car on n'accroît pas les biens en les divisant.
Quand la moitié d'un peuple croit qu'il ne sert à rien de faire des efforts car l'autre moitié les fera pour elle, et quand cette dernière moitié se dit qu'il ne sert à rien d'en faire car ils bénéficieront à d'autres, cela s'appelle le déclin et la fin d'une nation.
Dr. Adrian Rogers, 1931
Sve@r est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 21/11/2012, 10h54   #4
diogene
Responsable Modération
 
Avatar de diogene
 
Homme Patrick Gonord
Enseignant Chercheur
Inscription : juin 2005
Messages : 5 435
Détails du profil
Informations personnelles :
Nom : Homme Patrick Gonord
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Enseignant Chercheur
Secteur : Enseignement

Informations forums :
Inscription : juin 2005
Messages : 5 435
Points : 12 967
Points : 12 967
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.
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:
Affichera 1 et là, ce sera tout à fait normal...
C'est vrai que cette erreur est fortement plausible dans ce cas.
__________________
Publication : Concepts en C

Mon avatar : Glenn Gould

--------------------------------------------------------------------------
Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !
diogene est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 21h12.


 
 
 
 
Partenaires

Hébergement Web