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