复杂的c代码,我需要任何人来解释它是如何工作的?
我有以下函数,witch获取一个整数(十进制数),并在将其转换为二进制后返回该整数的个数(例如,如果我们通过6,函数将返回2,因为十进制数中的6等于二进制数中的110)。 这很好,但不幸的是我不明白它是如何工作的。代码是:复杂的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)
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的位数的算法,没有分支。这里描述的是: