我编写了一个简单的C程序,想知道是否正在进行整数提升。
请解释整数推广如何发生以及如何避免?
/* start of main */
unsigned short int res;
unsigned short int bsp;
signed short int analog;
bsp = 2215;
analog = 2213;
if((signed short int)(bsp - analog) > 0){
res = bsp - analog;
printf("%d", res);
}
else{
res = analog - bsp;
printf("%d", res);
}
答案 0 :(得分:2)
我要将此答案限制为int
为32位,short
为16位。
然后bsp - analog
是int
类型的表达式。
如果无法在short
中表示bsp - analog
,则将此广告投放到short
的行为是未定义的。因此请谨慎编写(signed short int)(bsp - analog)
之类的代码。
在res
来电中int
隐含地宣传printf
。
最后,避免不必要的促销活动的最佳方法是始终使用相同的类型。考虑在您的案例中使用int
或long
。
答案 1 :(得分:2)
整数促销由程序中的两个不同来源发布:
-
运算符 1 )printf
可变参数函数)在这两种情况下,signed short int
类型的参数都会提升为int
,假设int
范围可以包含以前类型可以容纳的每个数字。通常,它会以这种方式发生,因为short
和int
分别是16位和32位宽。
1)与>
运算符一样好(如下面chux的comment中所述)。