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

Why does x = 44 in this case?

本文关键字:这种情况下 为什么      更新时间:2023-10-16

unsigned char x = 0;
unsigned char y = 150;
x = 2 * y;
cout << "x: " << (int)x << endl; // returns 44

我知道无符号字符意味着从 0 到 255 的 ASCII 字符,但我不知道为什么 x 打印我们的 44。

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

我知道无符号字符意味着从 0 到 255 的 ASCII 字符,但我不知道为什么 x 打印我们的 44。

因为 2*150 是大于 255 的 300。 300 超出了系统上非正弦字符的可表示值。

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

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