unsigned long long int在循环中的奇怪行为

h s*_*h s 1 c++ loops c++11

在hackerrank上解决问题时,我注意到for循环中发生了一件奇怪的事情。首先,让我显示一个示例代码:

#include <bits/stdc++.h>
using namespace std;
#define modVal 1000000007;

int main() {
    for(long long int i=2;i>=0;--i){
        cout<<"here: "<<i<<endl;
    }
}
Run Code Online (Sandbox Code Playgroud)

输入:123

输出:这里:2这里:1这里:0164

现在,当我更改long long intunsigned long long intin循环以进行变量的初始化时i。变量使用i初始化18446744073709551615。为什么会这样呢?

Mic*_*kis 6

当变量是无符号的,i >= 0永远正确的。因此,循环永远不会结束。当我到达0时,下一个- i变为0xFFFFFFFFFFFFFFFF(十进制18446744073709551615)。

  • @hs如果此答案解决了您的问题,则可能需要将其标记为正确答案。然后在搜索中人们可以看到问题已经解决。 (2认同)