天天看點

《編寫高品質代碼:改善c程式代碼的125個建議》——建議14-2:在右移中合理地選擇0或符号位來填充空出的位

本節書摘來自華章計算機《編寫高品質代碼:改善c程式代碼的125個建議》一書中的第2章,建議14-2,作者:馬 偉 更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。

在右移運算中,空出的位用0還是符号位進行填充呢?

其實答案由具體的c語言編譯器實作來決定。在通常情況下,如果要進行移位的操作數是無符号類型的,那麼空出的位将用0進行填充;如果要進行移位的操作數是有符号類型的,則c語言編譯器實作既可選擇0來進行填充,也可選擇符号位進行填充。

是以,如果很關心一個右移運算中的空位,那麼可以使用unsigned修飾符來聲明變量,這樣空位都會被設定為0。同時,如果一個程式采用了有符号數的右移位操作,那麼它就是不可移植的。