- 零基礎學Java程序設計
- 祝明慧編著
- 680字
- 2022-05-06 19:56:06
3.3.2 移位運算

移位運算按照規則將二進制數的每一位向左或向右移動,從而改變數值大小。Java語言提供了3個移位運算的運算符,即移位運算符,如表3.9所示。
表3.9 移位運算符

1.左移運算
左移運算使用左移運算符(<<)將二進制數的每一位向左移動指定位數。使用左移運算符構建的表達式被稱為左移運算表達式。其語法形式如下:

左移運算表達式需要兩個操作數,因此左移運算符是二元運算符(雙目運算符)。左移分為無符號整型左移和有符號整型左移。下面將詳細講解這兩種左移方式。
(1)無符號整型左移:將一個二進制數的每一位向左移動指定的位數,其中左邊被移出整型存儲邊界的位直接拋棄,右邊空白的位用0填補。如圖3.20所示為無符號整型二進制數00001111左移4位的過程。

圖3.20 無符號整型左移
注意:左移1位的效果相當于將一個整數乘以一個因子為2的整數。向左移動一個整數的比特位相當于將這個數乘以2。以下算式展示的就是將整數15的位向左移動4位的結果。

【示例3-25】下面將二進制數00001111向左移動4位。代碼如下:

運行結果如下:

(2)有符號整型左移:有符號整型通過二進制位的第一位來表示,第一位為0表示正數,為1表示負數。其余的位(稱為數值位)用來存儲實值。有符號正數和無符號正數在計算機中存儲的結果是一樣的。如圖3.21所示為+4的二進制存儲。

圖3.21 +4的二進制存儲
負數的存儲(二進制存儲)比較復雜,這里需要有一個運算,即2的n次方減去負數的絕對值,其中n為數值位的位數。例如-4,它以byte類型存儲時有7位數值位,所以它的二進制存儲等同于

再將124轉化為二進制數,就是-4的二進制存儲,如圖3.22所示。

圖3.22 -4的二進制存儲
除了可以使用2的n次方減去負數的絕對值這個方法計算負數的二進制存儲外,還可以使用取反加1的方法(補碼)實現負數的二進制存儲。還是以-4為例,首先,獲取4的原碼,即00000100,然后進行取反,如圖3.23所示。

圖3.23 原碼取反
最后將取反的值加1,如圖3.24所示。

圖3.24 取反值加1
得到的11111100為-4的二進制存儲。了解了正數和負數的表示后,再來看有符號整型左移,對于一個正數來說,其左移就是無符號整型左移,對于一個負數來說,后面的運算一樣,即左移1位乘以2。
【示例3-26】下面將-4向左移動1位。代碼如下:


運行結果如下:

2.右移運算
右移運算使用右移運算符(>>)將二進制數的每一位向右移動指定位數。使用右移運算符構建的表達式被稱為右移運算表達式。其語法形式如下:

右移運算表達式需要兩個操作數,因此右移運算符是二元運算符(雙目運算符)。右移分為無符號整型右移和有符號整型右移。下面將詳細講解這兩種右移方式。
(1)無符號整型右移:將一個二進制數的每一位向右移動指定的位數,其中右邊被移出整型存儲邊界的位直接拋棄,左邊空白的位用0填補。如圖3.25所示為無符號整型二進制數00001111右移2位的過程。

圖3.25 無符號整型右移
注意:右移1位的效果相當于將一個整數除以一個因子為2的整數。向右移動一個整數的比特位相當于將這個數除以2。以下算式展示的就是將整數15的位向右移動2位的結果:

【示例3-27】下面將15右移2位。代碼如下:

運行結果如下:

(2)有符號整型右移:如果是正數,其右移和無符號整型右移是一樣的,但是對于負數來說是有分別的,它需要使用符號位去填充空白位。如圖3.26所示為將-4向右移動1位的操作。

圖3.26 有符號整型右移
【示例3-28】下面將-4右移1位。代碼如下:

運行結果如下:

3.邏輯右移運算
邏輯右移運算需要使用邏輯右移運算符(>>>)。使用邏輯右移運算符構建的表達式被稱為邏輯右移運算表達式。其語法形式如下:

邏輯右移運算符需要兩個操作數,因此它是二元運算符(雙目運算符)。邏輯右移是無符號右移,忽略符號位,空位都以0補齊。
【示例3-29】下面將15邏輯右移2位。代碼如下:

運行結果如下:

- Flask Web全棧開發實戰
- Java程序設計與開發
- 程序員面試白皮書
- 零基礎PHP學習筆記
- Java Web及其框架技術
- 微服務設計原理與架構
- Effective Python Penetration Testing
- SharePoint Development with the SharePoint Framework
- 編程菜鳥學Python數據分析
- iPhone應用開發從入門到精通
- Illustrator CS6設計與應用任務教程
- INSTANT Apache ServiceMix How-to
- TypeScript圖形渲染實戰:2D架構設計與實現
- Python無監督學習
- C Primer Plus(第6版)中文版【最新修訂版】