有符号和无符号二元运算符的提升规则
考虑以下代码片段:
// Snippet 1 int max = std::numeric_limits::max(); unsigned int one = 1; unsigned int result = max one;
// Snippet 2 unsigned int us = 42; int neg = -43; int result = us neg;
在这些情况下,考虑到操作数的不同符号,“ ”运算符如何确定正确的结果类型?
该运算符遵循“通常的算术转换”规则,它根据操作数类型规定类型转换步骤。根据此规则,如果任一操作数为:
Since int 和 unsigned int 在规则中是可以互换的,选择具有更宽类型(unsigned int)的操作数作为结果类型。
这解释了为什么代码段 1 中,结果是 unsigned int (2147483648),而在代码段 2 中,结果是 int (-1)。有符号操作数 (neg) 隐式转换为无符号 int,在后一种情况下会产生未定义的值。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3