gpt4 book ai didi

c++ - 位操作,置换位

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:00:02 27 4
gpt4 key购买 nike

我正在尝试创建一个循环遍历所有不同的整数,其中最后 40 位中正好有 10 位设置为高,其余设置为低。原因是我有一个包含 40 个不同值的映射,我想将这些值中的 10 个相乘的所有不同方式相加。 (这只是出于好奇,所以真正感兴趣的是“bitmanip”循环,而不是总和。)

如果我用例如4位中的2位,全部手动设置很容易,

0011 = 3,
0101 = 5,
1001 = 9,
0110 = 6,
1010 = 10,
1100 = 12,

但是对于 40 个中的 10 个,我似乎无法找到有效生成这些的方法。我试过,从 1023(二进制 = 1111111111)开始,找到了一个很好的方法来操纵它,但没有成功。我一直在尝试在 C++ 中执行此操作,但它确实是我们感兴趣的通用方法(如果有的话)。我做了一些谷歌搜索,但收效甚微,如果有人有一个很好的链接,那当然也会很感激。 :)

最佳答案

您可以使用选择/组合算法的任何标准实现。基本上,您要从 40 位中选择 10 位,将其设置为 1

也就是说,40 choose 10 is 847,660,528 .并且这个数字将乘以许多不在前 40 位中的可能的“尾”位。大概尾位不受任何规则的约束,所以如果有 k 位,那将是另一个 2k 因素。

这个算法,即使你实现了它,也会非常慢。想出更好的方法来解决您遇到的任何问题可能是个好主意。

相关问题

关于c++ - 位操作,置换位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2865396/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com