提升规则如何管理具有混合符号类型的二元运算符算术
考虑以下代码:
int max = std::numeric_limits<int>::max(); unsigned int one = 1; unsigned int result = max + one;
运算符计算结果为 2147483648,建议使用 unsigned int返回类型。相反,在以下代码中:
unsigned int us = 42; int neg = -43; int result = us + neg;
result 为 -1,表示 int 返回类型。
促销规则解析
C标准定义了算术二元运算符(C §5/9):
的含义示例
在这两个示例中,提升规则都会生成无符号类型
示例 1: max 和 1 都提升为 unsigned int,导致返回类型为 unsigned int。
示例 2: 提升规则并没有规定 int 和 unsigned int 之间明显的胜者。但是,选择了无符号类型,导致结果无符号溢出。由于结果最终分配给 int,因此根据 C §4.7/3,结果值是未定义的。
以上是C 提升规则如何确定混合有符号和无符号整数类型的二元算术运算符的返回类型?的详细内容。更多信息请关注PHP中文网其他相关文章!