Problème simple de calcul

Problème simple de calcul - C - Programmation

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.
 
 
 

Reply

Marsh Posté le 04-10-2013 à 19:01:41   

Reply

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 ).
 

Reply

Marsh Posté le 04-10-2013 à 21:04:29    

Bonjour,
 
Ca sert à quoi d'additionner des caractères ?

Reply

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.

Reply

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é ).

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed