我试图弄清楚这段代码发生了什么
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 的结果总是“?”。谁能指出我的原因?谢谢
我试图弄清楚这段代码发生了什么
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 的结果总是“?”。谁能指出我的原因?谢谢
结果3.56 * 10 * 7
是 249.2。
如果char
您系统上的类型是带符号的 8 位值,范围从 -128 到 127,那么尝试分配 249.2 将导致溢出。如果您分配给 aint
而不是 a char
,它将被存储为 249。
问号是因为 -7 不是可打印字符。
char 的默认显示方法是它的 ascii/unicode 值。对于无法显示的值,一个 ? 显示。对于其他人,将显示等效字符。例如,65 的 char 值将显示A
您将值 249.2 写入超出范围的有符号字符,因此将其转换为 ? 特点。
3.56*7*10 是 249.200.....2。将其放入 char 时变为 -7,因为 char 是 8 位有符号值。-7 来自 249(截断)- 256。