Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.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,我有以下函数,witch获取一个整数(十进制数),并在将其转换为二进制后返回该整数的个数(例如,如果我们通过6,函数将返回2,因为十进制数中的6等于二进制数中的110)。 这很好,但不幸的是我不明白它是如何工作的。代码是: int number_of_ones(int i){ i = i - ((i >> 1) & 0x55555555); i = (i & 0x33333333) + ((i >> 2) & 0x33333333)

我有以下函数,witch获取一个整数(十进制数),并在将其转换为二进制后返回该整数的个数(例如,如果我们通过6,函数将返回2,因为十进制数中的6等于二进制数中的110)。 这很好,但不幸的是我不明白它是如何工作的。代码是:

int number_of_ones(int i){
    i = i - ((i >> 1) & 0x55555555);
    i = (i & 0x33333333) + ((i >> 2) & 0x33333333);
    return (((i + (i >> 4)) & 0x0F0F0F0F) * 0x01010101) >> 24;
}

有人能向我解释一下它是如何工作的吗?

这是一种计算设置为1的位数的算法,没有分支。这里描述的是: