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

Hup*_*ppo 1 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 ?
Run Code Online (Sandbox Code Playgroud)

我无法理解为什么l结果为'7',对于c,无论我改变值i,j,c的结果总是'?'.有人能指出我的理由吗?谢谢

Mar*_*ers 6

结果3.56 * 10 * 7是249.2.

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

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