c++ - for 循环需要运行 LLONG_MAX 次,但计数器变量也需要表示有符号数。你用什么类型的柜台?

标签 c++

我希望你能接受这个假设性的问题,即使这对任何人来说可能从来都不是问题。

我曾经像这样编写我的 for 循环

for (size_t i = 0; i < container.size(); ++i)

为了避免与比较有符号和无符号相关的警告,但是在尝试让 i 参与导致负数的操作中被咬了太多次之后,我开始这样写它们,将大小转换为 int 也可以避免该警告:

for (int i = 0; i < (int)container.size(); ++i)

现在假设有一种情况 container.size() > INT_MAX 并且在循环中我们有类似的东西。

for (int i = 0; i < (int)container.size(); ++i) {
  size_t x = 0;
  while (i - x++ > INT_MIN) {
    // do stuff
  }
}

我们需要 i 进行签名,但我们还需要 i 能够表示大于 INT_MAX 的数字。我知道这里使用 long 的 super 简单答案,但是如果您必须运行循环 >,即使您使用 long long 最终也会出现同样的问题LLONG_MAX 次。

在这种情况下,您最终将被迫为能够表示如此大的数字的计数器变量使用无符号类型,但您仍然需要能够检查这种情况

while (i - x++ > LLONG_MIN)

你是怎么做到的? (假设您实际上有理由运行一个循环 9 quintillion 次)。

最佳答案

我想一个合理的方法是使用一些 bignum library .一种不太合理但可能更有趣的方法是自行实现所需内容。

关于c++ - for 循环需要运行 LLONG_MAX 次,但计数器变量也需要表示有符号数。你用什么类型的柜台?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40367890/

相关文章:

linux - 使用 C++ 以编程方式监视进程状态

c++ - 在子类中初始化父类的 const 成员

c++ - ReadProcessMemory 比 SharedMemory 上的 memcpy 更快

c++ - 如何使 O(n) 的功能检查字母(上和下)和 ()+-*/到尾递归?

c++ - 在具有多层继承的结构中设置 cout 支持

c++ - 不可变数据结构还是 const 变量?

c++ - C++ 中带有 std::vector 的二维数组 - 容器

c++ - 类构造函数中的 new 会发生什么?

c++ - 在运行时检测下溢/溢出错误?

c++ - 如何提取注册表的当前状态? (在 C/C++、XP 中)