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 图表吗?
我知道 unsigned char 表示从 0 到 255 的 ASCII 字符,但我不知道为什么 x 打印我们的 44。
因为 2*150 是 300,大于 255。300 超出了系统上 unsined char 的可表示值。
当算术运算的实际结果超出目标无符号类型的可表示值时,结果将与实际结果对可表示值的数量取模后一致。44 与 300 模 256 全等。
PS 对于有符号整数类型,如果算术运算的结果超出可表示的值,则程序的行为将是未定义的。不惜一切代价避免。
| 归档时间: |
|
| 查看次数: |
106 次 |
| 最近记录: |