在下面的代碼中,哪些陳述句具有整數提升?
unchar a;
unchar b;
short c;
a = 0xFE;
b = 0xFE;
c = a b;
int d = a==b
我在一個問題系列中得到了這樣的問題。如何回答。
此外,一些資料型別,如 char 、 short int 占用的位元組數比 int 少,當對它們執行操作時,這些資料型別會自動提升為 int 或 unsigned int。這稱為整數提升。例如,在 char、short 和 enum 等較小的型別上不會發生算術計算。
uj5u.com熱心網友回復:
哪些陳述句具有整數提升。
unchar a;
unchar b;
short c;
這些似乎是宣告,并且可能unchar是unsigned char. 它們中沒有運算式,因此沒有整數提升。
a = 0xFE;
0xFE是一個無后綴的十六進制常量,其值 254 必須適合int. 根據 C 2018 6.4.4.1 5,它的型別是int. a是一個左值。作為賦值的左運算元,它作為左值保留而不轉換為值。
根據 C 2018 6.5.16 2,右運算元轉換為左運算元在左值轉換后將具有的型別,因此unsigned char. 不執行整數提升。
b = 0xFE;
這與上述相同。
c = a b;
對于算術運算元的二元 運算子,根據 c 2018 6.5.6 5 執行通常的算術轉換。對于整數運算,通常的算術轉換包括整數提升。因此整數提升在a和 上執行b。
除了在深奧的 C 實作中,int可以表示unsigned char. 在這種情況下,整數促銷轉換unsigned char為int. 所以他們將每個a和轉換b為int。
然后 產生一個int結果,因為它是賦值的右運算元,所以它被轉換為c左值轉換后的型別,short. 沒有進一步的整數促銷。
int d = a==b
這與上面類似。對于 的算術運算元==,按照 C 2018 6.5.9 4 執行通常的算術轉換。這些包括 ona和 on的整數提升b。這里沒有其他整數促銷。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/473132.html
標籤:C
上一篇:如何使用OpenCVpython對網格的輪廓進行排序?
下一篇:掃描二進制檔案中的病毒簽名
