Arithmétique des valeurs de caractère C

J’ai lu dans le livre “Le langage de programmation C” en apprenant C et je suis tombé sur l’arithmétique s[i] - '0' qui indique que cela donne la valeur numérique du caractère stocké dans s [i]. Je ne l’ai pas bien compris, comment pourrait-il donner la valeur par soustraction? Remarque Ceci est utilisé dans la fonction atoi, qui convertit une chaîne de chiffres en son équivalent numérique. Merci

Ce que vous devez comprendre, en gros, c’est que sur un ordinateur moderne, toutes les informations sont stockées numériquement sous forme de séquence d’octets. C’est à chaque programme de décider comment interpréter chaque octet. Ainsi, un caractère n’est rien d’autre qu’un ou plusieurs octets – une valeur numérique qui représente généralement une lettre ou un symbole lisible par l’homme. Par exemple, en ASCII, la lettre “A” est représentée par la valeur numérique 65.

Cela signifie que dans certains langages de programmation, tels que C, vous pouvez traiter les caractères comme des valeurs numériques. Par exemple, en C, l’expression 'A' + 1 vous donnera 66, qui correspond à la valeur ASCII pour B (en supposant que votre compilateur / plateforme utilise un jeu de caractères compatible ASCII).

Double possible: voir ici

'0' représente 48 caractères. Donc, en le soustrayant ( '0' ) avec n’importe quelle autre valeur de caractère telle que '1' , '2' donnera le nombre respectif, donc '9''0' vous donnera 9 .

Notez la différence que nous sums sous les deux caractères: '9''0' , ici les deux sont des caractères

Les valeurs de caractère de '0' à '9' sont garanties pour être des valeurs séquentielles dans tous les jeux de caractères en C.

(C99, 5.1.2p3) “Dans les jeux de caractères de base source et d’exécution, la valeur de chaque caractère après 0 dans la liste de chiffres décimaux ci-dessus doit être supérieure de un à la valeur du précédent.”

Cela signifie par exemple que '1' == '0' + 1

Sous le capot, un caractère est représenté par une valeur numérique. Les caractères pour les nombres 0 à 9 sont stockés dans des valeurs numériques croissantes. Si nous utilisons 0 comme valeur de base, une simple soustraction peut convertir un caractère 0-9 en valeur int équivalente