Maison >développement back-end >C++ >Pourquoi un préfixe zéro transforme-t-il 0123 en 83 en C/C ?
Les constantes numériques et le pouvoir mystique du préfixe zéro
Vous êtes-vous déjà demandé ce qui se passe lorsque vous préfixez une constante numérique en C/C avec un zéro ? Contrairement aux constantes décimales familières (par exemple 123), il semble que cette modification apparemment anodine recèle un secret caché.
Pour illustrer ce comportement étrange, considérons l'exemple de la question d'origine : initialiser un int avec la valeur 0123. Curieusement, le résultat imprimé n'est pas 123 comme on pourrait s'y attendre mais un 83 inattendu. Que se passe-t-il sous le capot qui transforme ce nombre apparemment décimal en. quelque chose de différent ?
La réponse réside dans le monde énigmatique des constantes numériques, où le préfixe zéro détient un pouvoir ancien. Par défaut, les littéraux numériques en C/C sont supposés être décimaux (base 10). Cependant, si vous les préfixez avec un zéro, ils se transforment comme par magie en constantes octales, signalant au compilateur de les interpréter en base 8.
Dans le cas de 0123, chaque chiffre est interprété selon le système octal, ce qui donne le calcul suivant :
0 = 0
1 = 1
2 = 2
3 = 3
En combinant ces valeurs par groupes de trois, nous obtenons :
012 = 0 8^2 1 8 2 = 66
3 = 3
L'addition de ces deux valeurs nous donne le résultat final : 66 3 = 83.
Cela explique le comportement inattendu observé avec les zéros préfixés. C'est un témoignage des subtilités du C/C, où des mécanismes cachés peuvent révéler des résultats surprenants et souvent déroutants. Ainsi, la prochaine fois que vous rencontrerez une constante numérique préfixée par zéro, souvenez-vous de la porte octale qu'elle ouvre, permettant à vos compilations de parcourir le chemin le moins fréquenté.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!