Signification de zéro non significatif dans le littéral entier

J’étudie (ANSI) C par le langage de programmation C (2e édition) .

Extrait de code de 2.10 Opérateurs d’affectation et expressions :

1 /* bitcount() counts the number of 1-bits in its integer argument */ 2 int bitcount(unsigned x) 3 { 4 int b; 5 for (b = 0; x != 0; x >>= 1) 6 if (x & 01) 7 b++; 8 return b; 9 } 

Je ne comprends pas pourquoi x & 01 est écrit à la ligne 6 plutôt que x & 1 ou x & 0x1 ? Est-ce que 0 avant 1 nécessaire?

Le 01 pourrait également être écrit 1 ou 0x1.

 01 = Octal Constant Base 8 (1 Decimal) 1 = Decimal Constant. Base 10 0x1 = Hexadecimal Constant. Base 16 (1 Decimal). 

Lorsque le livre a été écrit, la base 8 (octale) était omniprésente dans la programmation informatique existante.

Un 0 initial fait d’une constante une valeur octale (base 8).

Dans ce cas, ce n’est pas différent de 1 ou 0x1 car ils auront tous la même représentation binary de 000...001 . Les gens utilisent souvent des constantes hexadécimales pour distinguer le fait qu’une valeur est utilisée aujourd’hui comme un masque binary ou une autre valeur binary. Dans le passé, les constantes octales étaient plus souvent utilisées dans le même but.

 0x1 = hex constant = 1 0X1 = hex constant = 1 01 = octal contant = 1 1 = decimal constant = 1 1U = unsigned decimal constant = 1 

En effet ” 01 ” est distinct de 1 et 0x1 en principe . ” 01 ” est codé en octal. Kernighan / Ritchie apprécie probablement la facilité avec laquelle on peut convertir d’octal en binary pour ce problème particulier.