Bonjour,
J'ai acheté le livre "Le langage C" des créateurs du C, Kernighan et Ritchie.
Je ne comprends pas tout. Je me demandais si vous pouviez m'expliquer certaines choses, sachant que je ne suis pas fort en programmation :-(
J'ai l'impression qu'il faut être très attentif aux types des variables.
P.44 : "Les règles de conversion se compliquent dans le cas d'opérandes unsigned. Le problème est que les comparaisons entre des valeurs signées et non signées dépendent de la machine, parce qu'elles dépendent des tailles des divers types entiers. Par exemple, en supposant qu'un int soit représenté sur 16 bits et un long sur 32 bits, -1L<-1U, car 1U, qui est un int, est promu en un signed long. Mais -1L>-1UL, car -1L est promu en unsigned long, et prend donc l'apparence d'un nombre positif très grand."
:'( Je n'y comprends rien. Pouvez-vous m'expliquer ce passage ?
Ce que j'ai compris c'est que signed et unsigned étaient deux qualificatifs servant pour int et char. Je crois aussi qu'on peut ajouter des suffixes aux nombres pour bien indiquer de quels types ils sont. Par exemple : si l'on veut faire de -2 un long, on peut écrire -2L. C'est cela ?
Comment les valeurs peuvent-elles changer de la sorte ?!
Merci par avance.



Concernant les caracteres ASCII donc par exemple.
ok, la valeur 12 sera donc en 12 en char. Mais attention. Il y a des caractères dont le code dépasse 127. le caractère avec le code 128 risque d'être représenté en c par la valeur "-127", le code 129 par "-126", etc... C'est au niveau des négatifs / valeurs qui dépassent le maximum signé que, en effet, il y a une histoire d'octets. En "complément à 2", sauf erreur -1 (en signed char 4 octets)= 1111 (en binaire) = 255 (en unsigned char 4 octets)
Au passage : il est possible que char soit plus que 4 octets. (bien que en pratique, sur les PC, il faut effectivement 4). La norme ne prévoit que le fait que ça doit être le plus petit type numérique.