1

純粋な ANSI C (C89) では、次のようになります。

unsigned y=<smallnumber>,x=y+3;
printf("%<whatgoeshere>\n",x-y);

%印刷されることを確実にするために、の後に何を入れます3か?%u(両方のオペランドが符号なしの場合、結果は符号なし) と(引数を に渡すときに%d整数式はに変換されます) の両方の引数をここで見ることができます。intprintf

もちろん、どちらも適切なコンパイラで動作します。これがまさに私がここで質問する理由です。:-) 標準に従って本当に正しいのは 1 つだけだと感じています (ただし、それでさえ間違っている可能性があります)。

4

2 に答える 2

5

署名なし。を使用し%uます。整数式でデフォルトのプロモーションを実行する場合 (printf()可変引数関数であるため)、符号なしから符号付きへの変換は行われません。

于 2013-06-01T22:10:06.543 に答える
0

こちらです

printf( "%d\n", (int)(x-y) );

とは異なり、x < y で機能し%uます。

x-yの結果がsigned intの範囲外の場合は機能しませんが。

于 2013-06-01T23:41:10.993 に答える