c - 如何在 C 中为表达式 long = short + short 强制整数提升

标签 c integer-promotion

<分区>

假设 int 是 16 位类型,以防止从 short 隐式转换。

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

最佳答案

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

表达式

return x+y

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

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

return ((long)x) + y

为了清楚起见,我在括号中加了括号。

关于c - 如何在 C 中为表达式 long = short + short 强制整数提升,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40332400/

相关文章:

c - 当涉及双返回类型的函数声明时,K&R 是否过时了?

c - 在 Linux 中如何进行 CPU 分配?线程级还是进程级?

Char 和 int16 数组元素都显示为 32 位十六进制?

C:下标值既不是数组也不是指针

使用指针的strcat的c程​​序

c - 如何将值传递给结构变量然后将结构写入文件?

c - 在 printf 需要 int 的地方给 printf 一个 char 参数是 UB 吗?

c++ - 按位或在转换为 int32 之前

GCC,奇怪的整数提升方案

c - 整数如何提升为无符号整数