为什么在这种情况下 x = 44?
Why does x = 44 in this case?
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 全等。
附言对于有符号整数类型,如果算术运算的结果超出可表示的值,则程序的行为将是未定义的。不惜一切代价避免。
相关文章:
- 为什么在这种情况下,bool 类型的输出等于 0?
- 为什么在这种情况下递增阵列名称有效?
- 为什么在这种情况下我需要 .template
- 为什么在这种情况下 x = 44?
- 为什么 lambda nullptr 取消引用在这种情况下有效?
- 为什么在这种情况下,前向声明不起作用?
- 为什么在这种情况下不调用我的虚拟函数实现?
- 在这种情况下,为什么模板即时深度超过限制?
- 为什么括号在这种情况下无法更改c++运算符的优先级
- 为什么在这种情况下调用非常量右值移动构造函数?
- 为什么在这种情况下不能将 Max 用作函数?
- 为什么 std::void_t 在这种情况下不起作用
- 为什么在这种情况下 boost::recursive_wrapper 不起作用
- 模板模板参数 - 在这种情况下为什么需要它们
- 在这种情况下,为什么使用 *此必需的对象引用返回对象引用
- 为什么我得到"C2678 二进制'+':没有找到采用类型为"const 的左操作数......"的运算符。"在这种情况下?
- 为什么在这种情况下创建临时实例不起作用?
- 为什么在这种情况下星号位置有所不同,而其他位置则没有
- 为什么GetEffectiveRightsFromAcl在这种情况下不返回任何权利?
- 为什么SFINAE在这种情况下不起作用?