在c ++中混淆混合数据类型

时间:2012-06-14 17:47:41

标签: c++

我想弄清楚这段代码发生了什么

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 个答案:

答案 0 :(得分:6)

3.56 * 10 * 7的结果是249.2。

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

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

答案 1 :(得分:1)

char的默认显示方法是ascii / unicode值。对于无法显示的值,a?显示。 对于其他人,将显示相同的字符。例如,char值为65将显示A

答案 2 :(得分:0)

您正在将值249.2写入超出范围的签名字符中,因此将其转换为?字符。

答案 3 :(得分:0)

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