按位运算功能

时间:2013-12-06 16:41:57

标签: c

结果功能在下面的代码中返回什么?

unsigned int result(unsigned int number) {
   return number & (number - 1);
}

2 个答案:

答案 0 :(得分:4)

这就是着名的“删除最低位”技巧。

你可以找到它here(参见hack#6),以及“计算机程序设计艺术”第4A卷,以及Hacker's Delight等等。

它的工作原理如下:

减去1借用所有最右边的零(将它们变为1),最后重置最低的零。与原始编号进行AND运算会重置已更改的位,但不会更改其余位。因此,最低设置位将被重置。

答案 1 :(得分:0)

它检查number是否为2 ^ x(或0)形式,在这种情况下返回0,或者在其他情况下返回!= 0。