-3
#include <stdio.h>

main() {
    unsigned a = -20;
    unsigned b = 10;
    printf("%d\n", (a % b));
    printf("%d\n", (-20 % 10));
}

Output:
6
0

最初の printf が 6 を出力するのに対し、2 番目の printf は期待される値 0 を出力します。

4

2 に答える 2

5

unsigned int0 から までUINT_MAXの値を保持できます。負の値は保持できません。So-20は に変換され-20 + UINT_MAX + 1ます。

システム上:

(-20 + UINT_MAX + 1) % 10 != -20 % 10
于 2013-04-20T15:51:00.830 に答える
2

そして、あなたは何を期待していますか?

a % bと同等です。値を代入して unary-を 20 の unsigned int 値に適用してみましょう。(UINT_MAX-20+1) % 10結果の型は であり、unsigned intそれを で出力していますが%d、これは間違っています。ここを使うべき%uです。

于 2013-04-20T15:52:19.707 に答える