我通过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 & 1
或x & 0x1
?在0
之前1
是否必要?
答案 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)的值。
在这种情况下,它与1
或0x1
没有区别,因为它们都具有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
”原则上与1
和0x1
不同。 “01
”以八进制编码。 Kernighan / Ritchie可能很重视这个特殊问题可以很容易地从八进制转换为二进制。