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,c 的结果总是“?”。谁能指出我的原因?谢谢

4

4 回答 4

6

结果3.56 * 10 * 7是 249.2。

如果char您系统上的类型是带符号的 8 位值,范围从 -128 到 127,那么尝试分配 249.2 将导致溢出。如果您分配给 aint而不是 a char,它将被存储为 249。

问号是因为 -7 不是可打印字符。

于 2012-06-14T17:51:37.657 回答
1

char 的默认显示方法是它的 ascii/unicode 值。对于无法显示的值,一个 ? 显示。对于其他人,将显示等效字符。例如,65 的 char 值将显示A

于 2012-06-14T17:51:24.710 回答
0

您将值 249.2 写入超出范围的有符号字符,因此将其转换为 ? 特点。

于 2012-06-14T17:52:57.457 回答
0

3.56*7*10 是 249.200.....2。将其放入 char 时变为 -7,因为 char 是 8 位有符号值。-7 来自 249(截断)- 256。

于 2012-06-14T17:53:54.023 回答