整数文字中前导零的含义

时间:2014-05-19 17:46:23

标签: c

我通过The C Programming Language (2nd Edition)学习(ANSI)C。

这是 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之前1是否必要?

3 个答案:

答案 0 :(得分:11)

01也可以写成1或0x1。

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

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

答案 1 :(得分:8)

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

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

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

答案 2 :(得分:2)

确实“01”原则上与10x1 不同。 “01”以八进制编码。 Kernighan / Ritchie可能很重视这个特殊问题可以很容易地从八进制转换为二进制。