C 語言中負數移位運算講解

2021-09-06 23:30:04 字數 1485 閱讀 4686

c 語言中負數移位運算講解

「<<」、「>>」為移位運算子。 「<<」為左移位運算子,即資料位元組中的每個二進位制位同時

向左移位。如「x<>」為右移位運算

符,即資料位元組中的每個二進位制位同時向右移位。如「x>>n」表示 x 中的每個二進位制位同時

向右移動 n 位。

下圖演示了乙個 2 位元組變數左移 3 位的過程:

十進位制數-555 的二進位製表:

1 0  0 0  0  0 1  0 0  0  1 0  1 0  1 1

先轉換成二進位制補碼表:

1 1  1 1  1  1 0  1 1  1  0 1  0 1  0 0

最左端位保持不變 補碼加「1」後狀態

再將補碼加「1」:

1 1  1 1  1  1 0  1 1  1  0 1  0 1  0 1

下一步向左移 3 位:

1 1  1 0  1  1 1  0 1  0  1 0  1 0  0 0

左端「離開」3 位丟棄 右端「移入」3 位用「0」補齊

最左端一位保持不變

再轉換成二進位制補碼表:

1 0  0 1  0  0 0  1 0  1  0 1  0 1  1 1

補碼再加「1」:

到此步結束。

1 0  0 1  0  0 0  1 0  1  0 1  1 0  0 0

補碼加「1」後狀態

結果轉換成十進位制數為「- 4440」。

總結:負數左移時,任何情況下「移入」位將用「0」補齊。

「>>」右移位運算可分為兩種情況:一種是移入「0」的叫邏輯右移;一種是移入「1」的叫

算術右移。 負數右移用到的是算術右移。

下圖演示了乙個 2 位元組變數右移 3 位的過程:

十進位制數-555 的二進位製表:

1 0  0 0  0  0 1  0 0  0  1 0  1 0  1 1

先轉換成二進位制補碼表:

1 1  1 1  1  1 0  1 1  1  0 1  0 1  0 0

最左端位保持不變 補碼加「1」後狀態

再將補碼加「1」:

1 1  1 1  1  1 0  1 1  1  0 1  0 1  0 1

下一步向右移 3 位:

1 1  1 1  1  1 1  1 1  0  1 1  1 0  1 0

左端「移入」3 位用「1」補齊 右端「離開」3 位丟棄

最左端一位保持不變

再轉換成二進位制補碼表:

1 0  0 0  0  0 0  0 0  1  0 0  0 1  0 1

補碼再加「1」:

到此步結束。

1 0  0 0  0  0 0  0 0  1  0 0  0 1  1 0

補碼加「1」後狀態

結果轉換成十進位制數為「- 70」。

總結:負數右移時,任何情況下「移入」位將用「1」補齊。

注:二進位製表最左端的二進位制位表示符號位,「+」用「0」表示,「-」用「1」表示。

c語言負數左移右移 C語言負數的移位運算

在c 中左移也就是所說的邏輯移位,右端補,而右移是算數移位,左端補齊的是最高位 的符號位。故負數左移,有可能變成正數,但負數右移,肯定還是負數。用進製的形式對資料進行賦值 這進製的數代表的是補碼。i 0xfffffff7 0xfffffff7 是補碼,而不是原碼,故 i 9 printf d x n...

C語言中位移位運算子

位移位運算子是將資料看成二進位制數,對其進行向左或向右移動若干位的運算。位移位運算子分為左移和右移兩種,均為雙目運算子。第一運算物件是移位物件,第二個運算物件是所移的二進位制位數。位移位運算子的運算物件 運算規則與結果 結合性如表2 16所示。移位時,移出的位數全部丟棄,移出的空位補入的數與左移還是...

C語言中位移位運算子

位移位運算子是將資料看成二進位制數,對其進行向左或向右移動若干位的運算。位移位運算子分為左移和右移兩種,均為雙目運算子。第一運算物件是移位物件,第二個運算物件是所移的二進位制位數。位移位運算子的運算物件 運算規則與結果 結合性如表2 16所示。移位時,移出的位數全部丟棄,移出的空位補入的數與左移還是...