在 HAKMEM 169 中,有一个步骤可以总结相邻八位字节中 1 的数量。
准确地说,我指的是以下链接:http ://www.verious.com/qa/fast-implementation-of-operations-on-large-sets-of-quite-big-integers/
// This is accomplished by right-shifting tmp by three bits, adding
// it to tmp itself and ANDing with a suitable mask. This yields a number in
// which groups of six adjacent bits (starting from the LSB) contain the number
// of 1¡äs among those six positions in n.
* (tmp + (tmp >> 3)) & 030707070707
我想知道的是,从八位字节(3 位)到双八位字节(6 位)是否真的需要这种 DOUBLING。如果没有加倍,做模数 7 会不会给出预期的结果?
假设没有 DOUBLING 操作的 temp 值为 00000002153(八位字节)。模数 7 (2^3-1) 将给我们 2+1+5+3,这是设置的位数。那么真的需要DOUBLE操作吗?