Maison >développement back-end >C++ >Pourquoi les zéros non significatifs modifient-ils les valeurs entières en C ?

Pourquoi les zéros non significatifs modifient-ils les valeurs entières en C ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-27 19:40:11286parcourir

Why Do Leading Zeros Change Integer Values in C  ?

Dévoilement de l'énigme des zéros non significatifs dans les entiers

Le comportement que vous avez observé dans Visual Studio 2013 est le reflet des règles de représentation des entiers dans différentes bases, notamment décimales, octales et hexadécimales.

Un un littéral entier en C peut commencer par zéro pour représenter différentes bases :

  • Décimal (base 10) : Un littéral décimal commence par un chiffre différent de zéro et se compose de chiffres à partir de 0 à 9.
  • Octal (base 8) : Un littéral octal commence par zéro suivi de chiffres de 0 à 7.
  • Hexadécimal (base 16) : Un littéral hexadécimal commence par 0x ou 0X et se compose de chiffres de 0 à 9 et des lettres a à f ( ou A à F).

Dans votre exemple :

  • 07 est un littéral octal, qui représente la valeur 7 (7 en base 10).
  • 16 est un littéral décimal, représentant la valeur 16.
  • 00016 est un littéral octal, qui représente la valeur 14 (16 en base 8).

Les erreurs du compilateur lors de la tentative d'attribution de 08 sont dues au fait que 8 n'est pas un chiffre octal valide. Il n'est valable que jusqu'à 7.

La raison de la conversion de 00016 en 14 est que les zéros non significatifs d'un littéral octal indiquent que le nombre est en base 8. Le compilateur effectue la conversion en multipliant chaque chiffre par sa puissance correspondante de 8, en commençant de droite à gauche.

Pour 00016, cela se traduit par :
0 * 8^4 0 * 8^3 0 * 8^2 1 * 8^1 6 * 8^0 = 14

Par conséquent, le comportement que vous avez observé est le résultat de l'interprétation par le compilateur des valeurs numériques basées sur leurs premiers chiffres et les règles des différentes bases en C .

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:
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