與問題Bitshift and integer promotion?類似,我有一個關於使用左移位時整數提升的問題。整數推廣與運營商<<
unsigned int test(void)
{
unsigned char value8;
unsigned int result;
value8 = 0x12;
result = value8 << 8;
return result;
}
在這種情況下,將是value8第一促進unsiged INT或者是具體的實施?
6.5.7按位的移位運算符... 3 ...語義學對
整數優惠在每個操作數的執行。結果的類型是 升級左操作數的類型。如果右操作數的值爲負值或者大於或等於提升的左操作數的寬度,則行爲不確定。
它說「整數升級是在每個操作數上執行的。」,但這裏的促銷規則是什麼?
我認爲它應該是convert to int if lesser rank than int
,但我找不到它。
我問這個問題,因爲一個編譯器(瑞薩nc30wa)沒有提升爲int,所以對於我的示例結果總是0。
在這個平臺上,char是8位寬,int 16位。
如果value8沒有被提升,這是一個編譯器錯誤。 –
這是一個問題,它是一個特定的錯誤還是實現? – jeb
@jeb請參閱我的答案中的編輯,某些編譯器默認禁用整數提升,並將其記錄在編譯器文檔中。您必須在編譯器文檔中查找ISO一致性。 – ouah