4

ループ内で符号なしの数値と符号付きの数値を比較しようとしていforますが、forループの後にステートメントが実行されていないため、forループが機能していないと思います。私のコードは次のとおりです。

#include <stdio.h>
int main()
{
   unsigned int i;
   for (i = 8; i >= -1; i--)
     printf ("%d\n", i);
   return 0;
}

上記のコードでは、ステートメントが実行されていないため、ループprintfの何が問題になっていますか。for符号なしの数値と符号付きの数値を比較することはできませんか?

4

2 に答える 2

7
unsigned int i;
for (i = 8 ; i >= -1; i--)

-1比較のために、符号なしタイプの最大値に変換されます。したがって、unsigned値については、

i >= -1

にのみ当てはまりますi = UINT_MAX

目的の出力を取得するための最も簡単な方法は、符号付き整数を使用することintです。

もう1つの方法は、ループ制御で少し魔法をかけることです。

for(i = 8+1; i-- > 0;)

ただし、その場合は、異常なループ制御コードを説明するコメントを必ず書き込んでください。

于 2012-12-26T06:41:10.200 に答える
-1

この問題を回避するために、変数をサイズと比較する場合は、通常、変数を符号なしとして宣言することをお勧めします。

コンパイラは、符号付きと符号なしのintの範囲が異なるため、符号付きタイプと符号なしタイプの比較について警告を出します。これらを相互に比較すると、驚くべき結果になる可能性があります。このような比較を行う必要がある場合は、キャストしている値が有効であることを確認した後、他の値と互換性があるように値の1つを明示的にキャストする必要があります。

于 2012-12-26T06:43:04.340 に答える