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
488 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!

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