tri*_*tae 4 c++ bit-manipulation
我试图创建一个循环遍历所有不同的整数,其中最后40位中的10个被设置为高,其余设置为低.原因是我有一个包含40个不同值的地图,我想总结所有不同的方式,其中十个这些值可以相乘.(这只是出于好奇,所以它真的是"bitmanip"-loop感兴趣,而不是这样的总和.)
如果我用例如4比特中的2比特来做这个,那么手动设置全部都很容易,
0011 = 3,
0101 = 5,
1001 = 9,
0110 = 6,
1010 = 10,
1100 = 12,
Run Code Online (Sandbox Code Playgroud)
但是在40个中有10个我似乎找不到有效生成这些方法的方法.我试过,从1023(=二进制的1111111111)开始,找到了一个很好的方法来操纵它,但没有成功.我一直在尝试用C++做这件事,但它确实是感兴趣的一般方法(如果有的话).我做了一些谷歌搜索,但没有成功,如果有人有一个很好的链接,那当然也会受到赞赏.:)
您可以使用选择/组合算法的任何标准实现.基本上你想选择40个中的10位,将被设置为1.
也就是说,40选10是847,660,528.然而,这个数字将乘以不在前40位的许多可能的"尾部"位.据推测,尾部位不受任何规则的约束,因此如果有k位,那么这将是另一个2 k因子.
即使你实现它,这个算法也会很慢.想一个更好的方法来解决你遇到的任何问题可能是一个好主意.