C++无符号无限循环比较错误

标签 c++ unsigned-integer

注意到我正在处理的一个程序中的错误,提取了代码,基本上就是这样。
它与带符号的 int 进行无符号比较并导致无限循环:

#include <iostream>  

int main()
{
    unsigned int i = 0;
    while (i < 1000000)
    {
        printf("%o\n", i);
        ++i;
    }
    return 0;
}

我试着用这个代替:

#include <iostream>

int main()
{
    unsigned int i = 0;
    while (i < 1000000u)
    {
        printf("%o\n", i);
        ++i;
    }
    return 0;
}

我认为这会修复有符号/无符号比较,但事实并非如此,它仍然陷入无限循环。所以我也尝试将它转换为 unsigned int,没有骰子,仍然是无限循环。

使用Visual Studio 2015,全面优化,发布编译。

最佳答案

虽然我无法在 Win7 或 Ubuntu(均为 64 位)上重现无限循环,但我认为问题在于您的 printf() 函数具有无符号八进制数表示,这让您认为它进入了无限循环。将 %o 参数更改为 %u 可能会澄清问题。

关于C++无符号无限循环比较错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39069686/

相关文章:

c++ - 修改R包gbm

MySQL 数据类型 INT(11) 而 UNSIGNED INT(10)?

types - 为什么 Kotlin 不支持无符号整数?

c++ - 依赖从任何数字类型(unsigned、int、...)到 double 的隐式提升是否安全?

c - unsigned int(32 位)到 unsigned long long(64 位)

c++ - 如果我定义了一个构造函数,为什么我必须使用指针?

c++ - 使用 Boost.Asio 执行干净关机的标准方法

c++ - C++20 中的严格别名规则是否允许标准 C++ unicode 字符和下划线类型之间存在 `reinterpret_cast`?

c++ - Quine McCluskey Minterm 为零怎么办