如何强制C中的整数提升表达式long = short + short

时间:2016-10-30 18:48:53

标签: c integer-promotion

让我们假设int是16位类型,以防止从short进行隐式转换。

long test_1(short x, short y)
{
    return x + y;
}
  1. 在此示例中,有关推广数字的C规则是什么?
  2. 如何防止模运算?

1 个答案:

答案 0 :(得分:1)

规则相对简单。二进制+将导致“最大”int的数据类型。如果你有两个相同类型的操作数,结果将是相同的类型。

表达式

return x+y

分两步评估。在第一个中,计算x + y的结果。这是一个简短的(如您的第一个声明)。然后它被转换为函数的类型。

如果要避免溢出,则需要将plus的操作数强制转换为所需的类型:

return ((long)x) + y

为了清晰起见,我已经过度表达了。