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

Pourquoi les nombres avec préfixe zéro se comportent-ils de manière inattendue en C ?

Barbara Streisand
Libérer: 2024-12-07 14:50:17
original
536 Les gens l'ont consulté

Why Do Zero-Prefixed Numbers Behave Unexpectedly in C  ?

Comprendre les nombres préfixés par zéro et leur signification

Dans le domaine de la programmation, les nombres préfixés par zéro peuvent présenter un comportement intrigant. Examinons les détails à l'aide d'exemples de Visual Studio 2013.

Considérez l'extrait de code suivant :

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

Traitement spécial des nombres avec préfixe zéro

Le compilateur interprète les nombres avec préfixe zéro différemment selon le contexte :

  • Nombres décimaux (Base 10) : Lorsqu'un nombre préfixé par zéro est constitué uniquement de chiffres de 0 à 7, il est interprété comme un nombre décimal. Par exemple, 07 équivaut à 7.
  • Nombres octaux (base 8) : Si un nombre préfixé par zéro contient un chiffre 8 ou 9, il est considéré comme un nombre octal. Cependant, notez qu'il s'agit d'une utilisation non valide selon la norme C.
  • Nombres hexadécimaux (base 16) : Les nombres préfixés par zéro qui commencent par 0x ou 0X sont interprétés comme des nombres hexadécimaux.

Comportement inhabituel avec 00016 et 05016

L'affectation int i = 00016; se résout en i == 14 car le compilateur traite les zéros non significatifs comme des chiffres octaux supplémentaires, même si cela n'est pas valide selon la norme C.

De même, int i = 05016; donne i == 2574 car le compilateur l'interprète comme suit :

  • 050 est traité comme un octal 50.
  • 16 est traité comme un décimal 16.
  • Le résultat est calculé comme (50 * 8) 16 = 2574.

Erreur de compilation avec 08

Un littéral entier commençant par 0 suivi d'un chiffre autre que 0-7, tel que 08, déclenche une compilation erreur car le compilateur s'attend à ce qu'il s'agisse d'un nombre octal, mais 8 n'est pas un chiffre octal valide.

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!

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