最佳答案
我在回答到另一个问题中看到了一个有趣的技巧,想更好地理解它。
给定一个无符号64位整数,我们感兴趣的是以下位:
1.......2.......3.......4.......5.......6.......7.......8.......
具体来说,我们希望将它们移到前8位,如下所示:
12345678........................................................
我们不关心.
所表示的位的值,并且它们不必被保留。
解决方案将屏蔽掉不需要的位,并将结果乘以0x2040810204081
。事实证明,这是有效的。
这个方法有多普遍?这种技术可以用来提取比特的任何子集吗?如果不是,如何确定该方法是否适用于特定的比特集?
最后,如何找到(a?)正确的乘数来提取给定的比特?