1

このコードで何が起こっているのかを理解しようとしています

int i = 10, j = 7, l;
unsigned int k;
double q = 3.56;
char c;

c = q * i * j;
l = c;
std::cout << l << "\n"; // result is -7
std::cout << c << "\n"; // result is ?

なぜ l の結果が '7' で、c の場合は値 i を変更しても、j の結果は常に '?' になるのか理解できませんでした。誰かが私にその理由を指摘できますか? ありがとう

4

4 に答える 4

6

の結果3.56 * 10 * 7は 249.2 です。

システムの型charが -128 ~ 127 の範囲の符号付き 8 ビット値である場合、249.2 を割り当てようとするとオーバーフローが発生します。inta の代わりにan を代入すると、char249 として保存されます。

疑問符は、-7 が印刷可能な文字ではないためです。

于 2012-06-14T17:51:37.657 に答える
1

char のデフォルトの表示方法は、ASCII/Unicode 値です。表示できない値については、? 示されています。それ以外の場合は、同等の文字が表示されます。たとえば、char 値が 65 の場合は、A

于 2012-06-14T17:51:24.710 に答える
0

3.56*7*10 は 249.200.....2 です。char は 8 ビットの符号付きの値なので、char に入れると -7 になります。-7 は 249 (切り捨て) - 256 に由来します。

于 2012-06-14T17:53:54.023 に答える
0

値 249.2 を範囲外の signed char に書き込んでいるため、? に変換されます。キャラクター。

于 2012-06-14T17:52:57.457 に答える