gpt4 book ai didi

c++ - 为什么 unsigned int 在最后一次迭代时崩溃循环?

转载 作者:太空宇宙 更新时间:2023-11-04 15:56:19 24 4
gpt4 key购买 nike

下面的程序产生了意想不到的结果

#include <iostream>
using namespace std;

int main() {
for(unsigned int i = 10; i >= 0; i--)
{
cout << i << endl;
}
return 0;
}

但是将 unsigned int 更改为 int 会得到输出 10,9,8...,0

拥有 unsigned int 并使用它迭代值 [n, 0](含)的正确方法是什么?我迭代数组的每个元素,但不想使用 foreach 语法,因为我需要一个变量来保存元素的位置。

最佳答案

unsigned 变为负数,不正确。无符号算术循环,所以在无符号算术中,如果你从零减一,你会得到最大可能的无符号值。这取决于你的编译器,但如果你有 32 位整数,那么它将是 4294967295。

我不认为您的程序应该崩溃,我认为它应该永远循环,因为在无符号算术中 i >= 0 始终为真。

顺便说一句,我编写该循环以使其正确使用无符号算术的方式是

for (unsigned int i = 11; i-- > 0; )
{
cout << i << endl;
}

关于c++ - 为什么 unsigned int 在最后一次迭代时崩溃循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57071695/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com