web-dev-qa-db-fra.com

0 est-il un octal ou une décimale en C?

J'ai lu ceci . Il est octal en C++ et décimal en Java. Mais aucune description de C?

Cela fera-t-il une différence si 0 est octal ou décimal? Telle est la question posée par mon intervieweur. J'ai dit non et j'ai expliqué qu'il est toujours égal à 0, qu'il soit octal ou décimal.

Il a ensuite demandé pourquoi il est considéré comme octal en C++ et décimal en Java. J'ai dit que c'était la norme. Veuillez me faire savoir ce que c'est en C? Cela fera-t-il une différence? Pourquoi sont-ils différents selon les normes?

61
Gibbs

Cela fait peu de différence, mais officiellement la constante entière 0 est octal en C. D'après les normes C99 et C11, 6.4.4.1 Constantes entières

constante entière :
constante décimale suffixe entieropt
constante octale suffixe entieropt
constante hexadécimale suffixe entieropt

constante décimale :
chiffre non nul
constante décimale chiffre

constante octale :
0
constante octale chiffre octal

constante hexadécimale :
...
...

92
juanchopanza

Octal.

C11 §6.4.4.1 Constantes entières

octal-constant:
    0
    octal-constant octal-digit

Et cela est vrai puisque C89 §3.1.3.2 .

60
Yu Hao

Puis il a demandé pourquoi est-il considéré comme octal en C++ et décimal en Java

Par souci d'exhaustivité, il convient de mentionner Java spécifications également. De Java Language Specification 3.10.1 :

DecimalNumeral:
    0
    NonZeroDigit Digitsopt
    NonZeroDigit Underscores Digits

Un chiffre décimal est soit le seul ASCII chiffre 0, représentant le zéro entier, soit un ASCII chiffre de 1 à 9 éventuellement suivi d'un ou de plusieurs ASCII chiffres de 0 à 9 entrecoupés de traits de soulignement, représentant un entier positif.

OctalNumeral:
    0 OctalDigits
    0 Underscores OctalDigits

Un chiffre octal se compose d'un ASCII chiffre 0 suivi d'un ou plusieurs des ASCII chiffres 0 à 7 entrecoupés de traits de soulignement) et peut représenter un zéro positif , ou entier négatif.

Comme vous pouvez le voir, un 0 est considéré comme décimal . Alors que toute séquence (non vide) de chiffres précédée de 0 est considéré comme octal .

Chose intéressante, d'après cette grammaire:

  • 0 est décimal
  • mais 00 est octal
29
Sylvain Leroux

C'est un octal. Voir section 6.4.4.1 Integer constants du projet N1570:

      integer-constant:
            decimal-constant integer-suffixopt
            octal-constant integer-suffixopt
            hexadecimal-constant integer-suffixopt
      decimal-constant:
            nonzero-digit
            decimal-constant digit
      octal-constant:
            0
            octal-constant octal-digit
      hexadecimal-constant:
            hexadecimal-prefix hexadecimal-digit
            hexadecimal-constant hexadecimal-digit
      hexadecimal-prefix: one of
            0x   0X
      nonzero-digit: one of
            1   2   3   4   5   6   7   8   9
      octal-digit: one of
            0   1   2   3   4   5   6   7
      hexadecimal-digit: one of
            0   1   2   3   4   5   6   7   8   9
            a   b   c   d   e   f
            A   B   C   D   E   F
      integer-suffix:
            unsigned-suffix long-suffixopt
            unsigned-suffix long-long-suffix
            long-suffix unsigned-suffixopt
            long-long-suffix unsigned-suffixopt
      unsigned-suffix: one of
            u   U
      long-suffix: one of
            l   L
      long-long-suffix: one of
            ll   LL

Aussi:

  1. Une constante décimale commence par un chiffre différent de zéro et se compose d'une séquence de chiffres décimaux. Une constante octale se compose du préfixe 0 suivi facultativement d'une séquence des chiffres 0 à 7 uniquement. Une constante hexadécimale se compose du préfixe 0x ou 0X suivi d'une séquence de chiffres décimaux et des lettres a (ou A) à f (ou F) avec des valeurs de 10 à 15 respectivement.
11
starrify

De la norme C (6.4.4.1 Constantes entières)

octal-constant:
0
octal-constant octal-digit

En fait, il n'y a aucune différence pour zéro car zéro est un chiffre commun pour les nombres octaux, décimaux et hexadécimaux. Il n'a de sens que lorsqu'un nombre a d'autres chiffres que le zéro (principal).

Tenez compte du fait qu'il n'existe aucun type intégral tel que décimal, octal ou hexadécimal.

10
Vlad from Moscow