符号不同时的二元运算符提升
当二元运算符对具有不同符号的操作数进行运算时,C 标准提供了确定提升的具体准则规则和结果类型。
标准第 5/9 节概述了“常用算术适用于此类运算符的转换”。这些转换遵循分层顺序:
将这些规则应用于提供的代码示例:
示例 1:
unsigned int one = 1; int max = std::numeric_limits<int>::max(); unsigned int result = max + one;
因为 unsigned int 优先于int 在规则第 5 步中,所有操作数都转换为 unsigned int。因此,结果的类型为 unsigned int。
示例 2:
unsigned int us = 42; int neg = -43; int result = us + neg;
在这种情况下,规则规定两个操作数都应转换为 unsigned int。但是,结果值 (-1) 不能用 unsigned int 表示。因此,表达式的结果类型是根据 §4.7/3 实现定义的。
以上是C 如何处理具有不同符号的二元运算符提升?的详细内容。更多信息请关注PHP中文网其他相关文章!