這是一個雙重問題。是否將某些數據類型轉換爲與算術右移相同的更大數據類型?
我一直在閱讀關於編譯器如何處理代碼的錯綜複雜的問題,並且我有這種困惑。這兩個過程似乎都遵循相同的符號整數符號擴展邏輯。那麼轉換是否僅僅作爲算術右移來實現呢?
其中一個例子規定的函數,如
Int Fun1(unsigned word) { Return (int) ((word << 24) >> 24); }
傳遞的參數爲0×87654321。 由於這將在轉換爲二進制文件時進行簽名,因此轉換將如何進行?我的邏輯是,左移應提取最後8位,將MSB保留爲0,然後我們在右移時擴展。這個邏輯是否正確?
編輯:我知道downvote可能是由於未指定的信息。假設一個32位的大端機器,其中有符號整數的二進制補碼。
你在問關於補碼? – tijko
'word'被聲明爲'unsigned',所以應該編譯爲邏輯而不是算術移位。轉換後執行有符號整數轉換。 – Neapolitan
如果'int'是32位,那麼'0x87654321'的類型是'unsigned int' –