在左移位中,值最左邊的幾位被丟棄,右邊多出來的幾個空位則由0補齊。
但是,右移位操作存在一個左移位操作不曾面臨的問題:從左邊移入的位,可以選擇兩種方案。
一種是邏輯移位,左邊移入的位用0填充;
一種是算數移位,左邊移入的位由原先該值的符號位決定,符號位為1則移入的位均為1,符號位為0則移入的為均為0,這樣就能夠保持原數的正負形式不變。
比如 值10010110,
邏輯右移兩位:00100101
算數右移移位:11100101
算數左移和邏輯左移是相同的,都是右邊多出來的填充0(需要主要不要溢出),它們只在右移時不同,而只有當操作數是負數時才不一樣。
為什么說使用了有符號數右移操作,就不可移植了?
標准說明無符號值的所有移位操作是采用邏輯移位,但對於有符號值,到底時采用邏輯移位還是算數移位取決與編譯器,不能保證所有的編譯器采用同樣的方式。因此,一個程序如果使用的有符號的右移位操作,它是不可移植的。