Problème simple de calcul - C - Programmation
Marsh Posté le 04-10-2013 à 20:06:00
C'est pas compliqué.
tu initialises b avec la valeur 'a'. Or, 'a' vaut 97 en code ASCII ( a minuscule , voir : http://fr.wikipedia.org/wiki/ASCII ).
d prend donc la valeur b + 1. b est converti du type char au type int au passage de façon implicite , ce qui donne d = 97 + 1 = 98
Je ne vois pas pourquoi tu attends la valeur 16, ca aurait été ça si tu avais fait d = a + 1; ( a étant initialisé à 15 ).
Marsh Posté le 04-10-2013 à 22:37:34
Merci xilebo, c'est très clair. Je n'avais pas pensé a la conversion des caractères en chiffre. Je pensais que b serait convertit en long affecté de la valeur 15.
Marsh Posté le 04-10-2013 à 22:43:36
ok je comprends mieux.
effectivement
b = a;
et
b = 'a';
n'ont pas la même signification.
Dans le premier cas, tu affectes la valeur de la variable a dans b. a étant un long et b un char, il y a donc un cast avec un risque potentiel de perte de données ( notamment si a avait contenu une valeur supérieure au max ou inférieure au min d'un char , ce qui n'est pas le cas ici ).
Dans le second cas, tu affectes simplement le caractère ASCII a ( représenté par 'a' ) dans la variable b. Tu aurais pu faire b = 97; ou encore b = 0x61; que ça n'aurait rien changé ( à part la lisibilité ).
Marsh Posté le 04-10-2013 à 19:01:41
Bonjours a tous,
Mon problème est assez simple.
J'ai essayé le code suivant:
int main()
{
long a = 15;
char b = 'a';
short c = 10;
int d = 0;
d = b + 1;
printf("%i", d);
return 0;
}
et la, je m'attendais a voir la réponse : 16 mais visiblement la réponse est : 98 ( avec mon IDE)
C'était un petit exo un site :"Introduction a la programmation"(3.8) et eux, on comme correction 66. (la correction est en ASCII 65)
Je ne comprends pas pour quelles raisons la réponse est ainsi.
Qqun a-t-il une explication?
Merci.