我想弄清楚这段代码发生了什么
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的结果总是'?'。有人能指出我的理由吗?感谢
答案 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。