结果功能在下面的代码中返回什么?
unsigned int result(unsigned int number) {
return number & (number - 1);
}
答案 0 :(得分:4)
这就是着名的“删除最低位”技巧。
你可以找到它here(参见hack#6),以及“计算机程序设计艺术”第4A卷,以及Hacker's Delight等等。
它的工作原理如下:
减去1借用所有最右边的零(将它们变为1),最后重置最低的零。与原始编号进行AND运算会重置已更改的位,但不会更改其余位。因此,最低设置位将被重置。
答案 1 :(得分:0)
它检查number
是否为2 ^ x(或0)形式,在这种情况下返回0,或者在其他情况下返回!= 0。