-6

ここでなぜn=0なのか疑問に思っていますか?

char c = 0xff;
    int n = c+1;
    cout << n << endl;
    system("pause");

1)c = 0xff
2)0xff + 1=0x100。

説明してもらえますか?

4

2 に答える 2

6

char符号なしタイプを想定すると0xff、10進数の値は255になります。それに1を追加すると、256、または256になります。0x100これは、16進数で印刷するように100操作したかのように出力されます。std::coutstd::cout << std::hex;

8ビットの符号付きcharがオーバーフローすると仮定すると、0xff-1になります。これに1を加えると、0になります。

于 2013-01-17T18:15:55.843 に答える
6

あなたのプラットフォームは明らかに署名された charタイプを使用しています。で初期化すると0xFF、オーバーフローして実装定義の動作につながります。最終c的にはに等しくなり-1ます。そして、に追加1すると-1、が得られます0。ここでは何も珍しいことはありません。

cあなたをとして宣言するunsigned charと、結果のn値は0x100、おそらくあなたが期待したものになります。

于 2013-01-17T18:18:44.613 に答える