ここでなぜn=0なのか疑問に思っていますか?
char c = 0xff;
int n = c+1;
cout << n << endl;
system("pause");
1)c = 0xff
2)0xff + 1=0x100。
説明してもらえますか?
ここでなぜn=0なのか疑問に思っていますか?
char c = 0xff;
int n = c+1;
cout << n << endl;
system("pause");
1)c = 0xff
2)0xff + 1=0x100。
説明してもらえますか?
char符号なしタイプを想定すると0xff、10進数の値は255になります。それに1を追加すると、256、または256になります。0x100これは、16進数で印刷するように100操作したかのように出力されます。std::coutstd::cout << std::hex;
8ビットの符号付きcharがオーバーフローすると仮定すると、0xff-1になります。これに1を加えると、0になります。
あなたのプラットフォームは明らかに署名された charタイプを使用しています。で初期化すると0xFF、オーバーフローして実装定義の動作につながります。最終c的にはに等しくなり-1ます。そして、に追加1すると-1、が得られます0。ここでは何も珍しいことはありません。
cあなたをとして宣言するunsigned charと、結果のn値は0x100、おそらくあなたが期待したものになります。