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