有符号和无符号二元运算符的提升规则
考虑以下代码片段:
// Snippet 1 int max = std::numeric_limits<int>::max(); unsigned int one = 1; unsigned int result = max + one;
// Snippet 2 unsigned int us = 42; int neg = -43; int result = us + neg;
在这些情况下,考虑到不同的符号符号,“ ”运算符如何确定正确的结果类型操作数?
运算符遵循“通常算术转换”规则,该规则根据操作数类型指示类型转换步骤。根据此规则,如果任一操作数为:
自int 和 unsigned int 在规则中可以互换,选择具有更宽类型(unsigned int)的操作数作为结果type.
这解释了为什么在代码片段 1 中,结果是 unsigned int (2147483648),而在代码片段 2 中,结果是 int (-1)。有符号操作数 (neg) 隐式转换为无符号 int,在后一种情况下会产生未定义的值。
以上是普通算术转换如何确定带符号和无符号操作数的二元'\”运算符的结果类型?的详细内容。更多信息请关注PHP中文网其他相关文章!