ここでなぜ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::cout
std::cout << std::hex;
8ビットの符号付きchar
がオーバーフローすると仮定すると、0xff
-1になります。これに1を加えると、0になります。
あなたのプラットフォームは明らかに署名された char
タイプを使用しています。で初期化すると0xFF
、オーバーフローして実装定義の動作につながります。最終c
的にはに等しくなり-1
ます。そして、に追加1
すると-1
、が得られます0
。ここでは何も珍しいことはありません。
c
あなたをとして宣言するunsigned char
と、結果のn
値は0x100
、おそらくあなたが期待したものになります。