Maison > développement back-end > C++ > Pourquoi les nombres précédés de zéro se comportent-ils de manière inattendue en C ?

Pourquoi les nombres précédés de zéro se comportent-ils de manière inattendue en C ?

Linda Hamilton
Libérer: 2024-12-02 22:43:12
original
445 Les gens l'ont consulté

Why Do Zero-Prepended Numbers Behave Unexpectedly in C  ?

Comprendre le comportement particulier des nombres précédés de zéro

On observe souvent que dans certains langages de programmation comme C , les chiffres préfixés par zéro présentent un comportement inattendu. Examinons les scénarios spécifiques que vous avez présentés pour comprendre ces bizarreries.

Considérez les extraits de code suivants :

int i = 07;     // i == 7
int i = 16;     // i == 16
int i = 00016;  // i == 14, why?
int i = 05016;  // i == 2574, wow )
int i = 08;     // compile error, compiler expects octal number...
Copier après la connexion

Zéro chiffres et interprétation octale

En C, des littéraux entiers peut être spécifié en bases décimales, octales ou hexadécimales. Les entiers précédés de zéro sont généralement interprétés comme des littéraux octaux, sauf lorsque le littéral commence par 0x ou 0X, ce qui indique une base hexadécimale.

Dans votre exemple, 00016 est interprété comme un littéral octal, ce qui donne i == 14. Les nombres octaux représentent les valeurs utilisant les chiffres de 0 à 7. Les zéros non significatifs n'affectent pas la valeur du littéral.

De même, 05016 est également interprété comme un littéral octal, qui peut être converti en décimal en multipliant chaque chiffre par la puissance appropriée de 8. Cela nous donne i == 2574.

Zéros non significatifs et hexadécimal Interprétation

Cependant, si le littéral commence par 0x ou 0X, il est interprété comme un littéral hexadécimal. Les nombres hexadécimaux représentent les valeurs utilisant les chiffres 0 à 9 et les lettres A-F (ou a-f).

Dans votre exemple, 0x16 serait interprété comme un littéral hexadécimal représentant la valeur 22.

Chiffres octaux et Erreur de syntaxe

Selon le standard C, 8 et 9 ne sont pas des octaux valides chiffres. Par conséquent, 08 est un littéral octal invalide et entraîne une erreur de syntaxe lors de la compilation.

Conclusion

Les bizarreries que vous avez observées avec les nombres précédés de zéro proviennent des règles spécifiques d'interprétation des littéraux entiers en C . En comprenant ces règles (à savoir, en interprétant les entiers précédés de zéro comme des littéraux octaux, sauf indication contraire), vous pouvez éviter les erreurs et gérer correctement les valeurs entières.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal