K&R的《C程序设计语言》一书中,有一个位计数函数:
int bitsCount(unsigned x)
{
int b;
for (b = 0; x != 0; x >>= 1)
if (x & 01)
b++;
return b;
}
我的问题是他们为什么使用x&01但不是x & 1 or x & 00000001? 01不是八进制1的意思吗?
从语义上讲,你是对的,这并不重要。x & 01
, x & 1
, x & 0x1
等都会做完全相同的事情(并且在每个正常的编译器中,生成完全相同的代码)。您在这里看到的是作者的约定,曾经相当标准(但从未具有普遍性),现在则少得多。在这种情况下使用八进制是为了清楚地表明正在发生按位运算;我敢打赌,作者也以八进制定义了标志常量(旨在按位或在一起)。这是因为,推理 010 和 017 比推理 8 和 15 容易得多,因为您可以一次考虑一位数字。今天,我发现使用十六进制更常见,原因完全相同(按位运算一次应用一位数字)。十六进制相对于八进制的优点是十六进制数字与字节很好地对齐,并且我希望在现代代码中看到大多数用十六进制常量编写的按位运算(尽管微不足道的常量x & 1而不是x & 0x1
在这种情况下)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)