wuy*_*bao 7 c bit-manipulation bit
在K&R的"C编程语言"一书中,有一个位计数功能:
int bitsCount(unsigned x)
{
int b;
for (b = 0; x != 0; x >>= 1)
if (x & 01)
b++;
return b;
}
Run Code Online (Sandbox Code Playgroud)
我的问题是为什么他们使用x&01而不是x&1或x&00000001?是不是01表示八进制1?
add*_*aon 10
在语义上,你是对的,没关系.x & 01,x & 1,x & 0x1,等都会做同样的事情(在每一个成熟的编译器,产生完全相同的代码).你在这里看到的是作者的惯例,曾经很标准(但从来没有普及),现在更不用说了.在这种情况下使用八进制是为了清楚地表明正在进行按位操作; 我敢打赌,作者也在八进制中定义了标志常量(意图是按位或一起).这是因为它更容易推理,比如010和017,然后推理8和15,因为你可以一次考虑一个数字.今天,我发现使用十六进制更常见,原因完全相同(按位操作一次应用一个数字).十六进制超过八进制的优点是十六进制数字与字节很好地对齐,我希望在现代代码中看到用十六进制常量写的大多数按位运算(尽管平凡常数<10我倾向于写为单个十进制数;所以我'亲自使用x & 1而不是x & 0x1在这种情况下).