c++ - 将 64 位循环拆分为多个整数上的 32 位循环

标签 c++ c loops

而不是使用一个 64 位 long类型变量作为循环计数器,我宁愿有几个 32 位循环计数器。我需要比 32 位可以容纳的循环更长的循环,在我的情况下使用 64 位会更慢。

有什么想法可以实现这一点,简单吗?

最佳答案

如果您想要的循环计数c可以分为两个都适合32位整数的因子,那么下面将使用32位循环m * n = c迭代柜台。例如,如果 c 是质数,则这将不起作用。

uint32_t m, n; // initialize according to your needs
for(uint32_t i = 0; i < m; ++i) {
    for(uint32_t j = 0; j < n; ++j) {

    }
}

这是一个更复杂的解决方案,应该适用于任何循环计数。您也不需要手动对数字进行因式分解。但请注意,如果循环计数不是编译时间常数,则 32 位计数器获得的任何时间肯定会被 64 位除法所损失。如果您不相信编译器会将 nr 替换为常量值,请手动进行计算。

const uint64_t c = 12000000000ull;
const uint32_t m = std::numeric_limits<uint32_t>::max();

const uint32_t n = c / m;
const uint32_t r = c % m;

for(std::uint32_t i = 0; i < n; ++i) {
    for(std::uint32_t j = 0; j < m; ++j) {
        do_stuff();
    }
}
for(std::uint32_t i = 0; i < r; ++i) {
    do_stuff();
}

关于c++ - 将 64 位循环拆分为多个整数上的 32 位循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24012550/

相关文章:

loops - 从循环中获取值 (Clojure)

c++ - 结构类型转换

C++ 管道/ReadFile lpNumberOfBytesRead/DLL

c++ - PlaySound 无法播放两个异步声音

c++ - 这部分代码是什么意思?

c - 如何修改已传递给 C 函数的指针?

c++ - 使用数组和结构的四分卫评级函数表现得很奇怪

c++ - ld : duplicate symbols for architecture x86_64 when defining a global var in a header

c++ - #include 头文件已经包含在包含的头文件中是常见的做法吗?

Jquery - 循环遍历具有特定类的每个 div 并根据其宽度应用新类