为什么在这种情况下 x = 44?

Gal*_*ari 1 c++ unsigned char


unsigned char x = 0;
unsigned char y = 150;

x = 2 * y;

cout << "x: " << (int)x << endl; // returns 44

Run Code Online (Sandbox Code Playgroud)

我知道 unsigned char 表示从 0 到 255 的 ASCII 字符,但我不知道为什么 x 打印我们的 44。

有人有我可以遵循的 ASCII 图表吗?

eer*_*ika 5

我知道 unsigned char 表示从 0 到 255 的 ASCII 字符,但我不知道为什么 x 打印我们的 44。

因为 2*150 是 300,大于 255。300 超出了系统上 unsined char 的可表示值。

当算术运算的实际结果超出目标无符号类型的可表示值时,结果将与实际结果对可表示值的数量取模后一致。44 与 300 模 256 全等。

PS 对于有符号整数类型,如果算术运算的结果超出可表示的值,则程序的行为将是未定义的。不惜一切代价避免。