我已经获得了以下代码,其中包含2个整数值,用于设置我的范围[left, right]
。我正在将整数转换为二进制表示,然后计算通过std::count
设置的位数。我的方法有效,但我遇到了性能问题。它需要太长时间才能完成,所以理想情况下我想在12000毫秒内完成这项工作,我目前已经完成了这项工作。关于如何优化此操作的任何想法,或者我必须以不同方式处理此问题而不使用std::bitset
?
编辑:我不知道整数值是什么,但我知道它们不大于64位。
long long countOnes ( int left, int right )
{
long long oneCount = 0;
for(int i = left; i <= right; i++)
{
std::bitset<64> b1 (i);
oneCount += b1.count();
}
return oneCount;
}