我正在研究一个函数,该函数将一个 64 位整数作为参数,并返回一个 64 位整数,并在最后返回一个所有设置位。01011001 -> 00001111 // examples00010100 -> 00000011我首先想到了以下算法:nb_ones = countSetBit(x)int64 res = 1for i from 1 to nb_ones+1: res |= (1 << i)这里 countSetBit 是一个 defined here有没有更直接的东西?我在 C++ 工作 最佳答案 countSetBit 可能已经针对您的平台进行了优化。要在最后设置给定数量的 1,只需转到 2 的下一个幂并减去 1。nb_ones = countSetBit(x)int64 res = nb_ones == 64 ? -1 : ((1 << nb_ones) - 1); 编辑: 来自 MSalters 评论的不错的非分支解决方案:int64_t res = ((1^(nb_ones>>6))<<nb_ones)-1;(nb_ones 中的第 6 位是 1 if-and-only-if nb_ones==64)关于c++ - 将设置位移动到 64 位整数的末尾,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47204909/
10-09 03:53