1

以下に 2 つのループがあります。最初のものはうまく機能しますが、2番目のものは無限ループです. なんで?

for (unsigned int i=0; i<3; ++i)
{
    std::cout << "i= " << i << std::endl; // this gives proper result
}

for (unsigned int i=3; i>=0; --i)
{
    std::cout << "i= " << i << std::endl; // infinite loop
}
4

6 に答える 6

3

unsigned intゼロ未満にすることはできません (これは、ループの条件がチェックしているものです)。2番目のiループで 0 からデクリメントされると、ラップアラウンドしUINT_MAXてループが続行されます。

于 2013-07-25T23:22:49.110 に答える
2

の最小値unsigned int iは 0 です。unsignedそれ以外のものは負であり、特にint にはない符号ビットが必要です。

そのi >= 0ため、常に true と評価されます。

于 2013-07-25T23:23:57.530 に答える
0

2 番目のループでは、ループを停止する条件 iは 0 未満でなければなりません。範囲はunsigned intです0 to 65535。したがって、ここunsigned int iでゼロ未満になることはできません。したがって、ループが無限になるため、条件は常に真です。を使用signed intすると、問題を解決できます。

于 2013-07-26T08:55:39.473 に答える