Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 函数中的位运算_C - Fatal编程技术网

C 函数中的位运算

C 函数中的位运算,c,C,函数结果在下面的代码中返回什么 unsigned int result(unsigned int number) { return number & (number - 1); } 它检查number的形式是否为2^x(或0),在这种情况下返回0,或!=在其他情况下为0。这就是著名的“删除最低设置位”技巧 你可以在《计算机编程艺术》第4A卷和《黑客的喜悦》等其他地方找到它(见hack#6) 其工作原理如下: 减去1将借用所有最右边的零(将它们转换为1),最后重置最低的一个。与原始

函数结果在下面的代码中返回什么

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

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

这就是著名的“删除最低设置位”技巧

你可以在《计算机编程艺术》第4A卷和《黑客的喜悦》等其他地方找到它(见hack#6)

其工作原理如下:


减去1将借用所有最右边的零(将它们转换为1),最后重置最低的一个。与原始数字进行ANDing将重置已更改的位,但不会更改其余的位。因此,最低设置位被重置。

使用So作为调试工具并不是特别有效:有更好的方法。请看。堆栈溢出不是一个逐个函数的调试器。“计数设置位数”算法的构造块。你用谷歌搜索过“数字和(数字-1)”(带引号)吗?令人惊讶的是你能找到什么…你试过了吗?即使是一次?也有一个隐式强制转换…如果你在无符号和有符号之间执行一个数学运算,你会得到一个有符号的值,预期的返回值也是一个无符号的,所以可能有两次强制转换。@user2485710好的,但这不会改变任何事情,是吗?就我的2美分,我喜欢学究,特别是C:DGood的答案——但有一次你不得不在“哦,我知道这个!”和“嘿,这是一个CS作业问题。做你自己的思考,你会学到更多”。甚至-自己用谷歌搜索。只需在引号中加上“number&(number-1)”就可以找到最热门的,很快就能找到答案的,或者更接近的第二个热门。