有符號數移位


在左移位中,值最左邊的幾位被丟棄,右邊多出來的幾個空位則由0補齊。
但是,右移位操作存在一個左移位操作不曾面臨的問題:從左邊移入的位,可以選擇兩種方案。
一種是邏輯移位,左邊移入的位用0填充
一種是算數移位,左邊移入的位由原先該值的符號位決定符號位為1則移入的位均為1,符號位為0則移入的為均為0
這樣就能夠保持原數的正負形式不變。

比如 值10010110,
邏輯右移兩位:00100101
算數右移移位:11100101

算數左移和邏輯左移是相同的,都是右邊多出來的填充0(需要主要不要溢出),它們只在右移時不同,而只有當操作數是負數時才不一樣。

為什么說使用了有符號數右移操作,就不可移植了?

標准說明無符號值的所有移位操作是采用邏輯移位,但對於有符號值,到底時采用邏輯移位還是算數移位取決與編譯器,不能保證所有的編譯器采用同樣的方式。因此,一個程序如果使用的有符號的右移位操作,它是不可移植的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM