整数文字中前导零的含义

我正在学习(ANSI)C 语言编程语言(第2版) 。

这是2.10赋值运算符和表达式的代码片段:

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 } 

我很困惑为什么x & 01写在第6行而不是x & 1x & 0x1 ? 是否有必要在0之前?

01也可以写成1或0x1。

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

编写本书时,Base 8(八进制)在现有的计算机编程中很普遍。

前导0将常量变为八进制 (基数为8)的值。

在这种情况下,它与10x1没有区别,因为它们都具有相同的000...001二进制表示。 人们经常使用hex常量来区分今天将值用作位掩码或其他位值。 过去,八进制常数更常用于同一目的。

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

实际上,“ 01原则上10x1不同。 “ 01 ”以八进制编码。 Kernighan / Ritchie可能很重视这个特定问题可以轻松地从八进制转换为二进制。