C语言中的位黑客无法理解

C语言中的位黑客无法理解,c,bit-manipulation,C,Bit Manipulation,我在一次采访中被问到这个问题,但我仍然不知道它的作用。有人能解释一下它是做什么的,怎么做的吗 v = v - ((v >> 1) & (T)~(T)0/3); // temp v = (v & (T)~(T)0/15*3) + ((v >> 2) & (T)~(T)0/15*3); // temp v = (v + (v >> 4)) & (T)~(T)0/255*1

我在一次采访中被问到这个问题,但我仍然不知道它的作用。有人能解释一下它是做什么的,怎么做的吗

v = v - ((v >> 1) & (T)~(T)0/3);                           // temp
v = (v & (T)~(T)0/15*3) + ((v >> 2) & (T)~(T)0/15*3);      // temp
v = (v + (v >> 4)) & (T)~(T)0/255*15;                      // temp
c = (T)(v * ((T)~(T)0/255)) >> (sizeof(T) - 1) * CHAR_BIT; // count
这里解释如下:

并行计数位集

将最佳位计数方法推广到位宽高达128(由类型T参数化)的整数:


T的值是多少,T、V和CIt的数据类型可以是任何类型。把它想象成C++中的模板。是程序员的面试吗?哇,那太快了!你是怎么找到这个的?快告诉我D+1用于快速查找:)@templatetypedef此页面是用于C位黑客的页面,所以我只是去检查它是否已经在这里。@dtb在页面中有关于
32
-位版本的解释,此版本是一个泛化版本,与
32
-位非常相似version@MatthewHoggan查看页面以了解解释,你可以在这个答案中找到另一种解释
v = v - ((v >> 1) & (T)~(T)0/3);                           // temp
v = (v & (T)~(T)0/15*3) + ((v >> 2) & (T)~(T)0/15*3);      // temp
v = (v + (v >> 4)) & (T)~(T)0/255*15;                      // temp
c = (T)(v * ((T)~(T)0/255)) >> (sizeof(T) - 1) * CHAR_BIT; // count