[英]Integer promotion in C program
我寫了一個簡單的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);
}
我打算將這個答案限制為32位的int
, short
的16位。
然后bsp - analog
是int
類型的表達式。
如果bsp - analog
不能用short
表示,那么將它轉換為short
的行為是不確定的。 因此請謹慎編寫類似(signed short int)(bsp - analog)
代碼。
在printf
調用中有一個隱式的res
升級為int
。
最后,避免不必要的促銷活動的最佳方法是始終使用相同的類型。 在您的情況下考慮使用int
或long
。
整數促銷由程序中的兩個不同來源發布:
-
運算符1 ) printf
variadic函數) 在這兩種情況下,將signed short int
類型的參數提升為int
,假設, int
范圍可以包含以前類型可以容納的每個數字。 通常,它以這種方式發生,因為short
和int
分別是16位和32位寬。
1)作為>
運算符(如下面chux的評論中所述)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.