我有以下问题。我有一个用二进制表示的数字。我需要一种方法来随机选择其中两个不同的位(即找到1和0)。除此之外,我还对该数字执行其他操作(反转序列,置换序列等),这些是我已经使用的方法:
有谁有更好的主意吗?我需要这些操作非常快(我正在使用popcount,clz和其他二进制操作)
最佳答案
我觉得我没有足够的信息来正确评估折衷,但是也许您会发现这个想法有用。要在一个单词中找到一个随机的1(通过popcount和容器采样在多个单词中找到1;通过补码找到0),首先测试popcount。如果弹出计数很高,则随机地均匀生成索引并对其进行测试,直到找到一个为止。如果popcount为中等,则采用统一的随机掩码进行按位AND(如果AND为零,则保留原始值)以减少popcount。当popcount低时,使用clz有效地编译(小)候选列表,然后随机地均匀采样。