整数文字中前导零的含义

Kev*_*ong 6 c

我正在学习(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  }
Run Code Online (Sandbox Code Playgroud)

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

Mah*_*mer 11

01也可以写成1或0x1.

01  = Octal Constant  Base 8 (1 Decimal)
1   = Decimal Constant. Base 10
0x1 = Hexadecimal Constant. Base 16 (1 Decimal).
Run Code Online (Sandbox Code Playgroud)

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

  • @ ST3,作为扩展(不是标准) (2认同)

Rya*_*ing 8

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

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

0x1  = hex constant = 1
0X1  = hex constant = 1
01   = octal contant = 1
1    = decimal constant = 1
1U   = unsigned decimal constant = 1
Run Code Online (Sandbox Code Playgroud)