移位運算符就是在二進制的基礎上對數字進行平移
我們知道
Java中byte
short和char類型在進行計算時都是先將其轉換為int類型
同樣在進行移位運算時也不例外
它們移位後的結果也都會變成int類型
由於int類型為
位的(
)
所以對於byte
short
char和int進行移位時
規定實際移動的次數最多是
位
如果超過
則按n = n %
來計算
也就是說移位
次和移位
次得到的結果相同
移動long型的數值時(long是
位的)
規定實際移動的次數是移動次數和
的余數
也就是移動
次和移動
次得到的結果相同
您可以親自動手做下試驗
現在我們介紹Java中的三種位移運算符
)《(左移)
運算規則
按二進制形式把所有的數字向左移動對應的位數
高位移出(捨棄)
低位的空位補零
語法格式
需要移位的數字 《 移位的次數
例如
《
則是將數字
左移
位
計算過程
《
首先把
轉換為二進制數字(int類型的話為
位
字節
long的話為
位
字節)
然後把該數字高位(左側)的兩個零移出
其他的數字都朝左平移
位
最後在低位(右側)的兩個空位補零
則得到的最終結果是
則轉換為十進制是
數學意義
在數字沒有溢出的前提下
對於正數和負數
左移一位都相當於乘以
的
次方
左移n位就相當於乘以
的n次方
比如
《
=
*
)》(帶符號右移)
運算規則
按二進制形式把所有的數字向右移動對應位數
低位移出(捨棄)
高位的空位補符號位
即正數補
負數補
語法格式
需要移位的數字 》 移位的次數
例如
》
則是將數字
右移
位
計算過程
的二進制形式為
然後把低位的最後兩個數字移出
因為該數字是正數
所以在高位補零
則得到的最終結果是
轉換為十進制是
數學意義
右移一位相當於除
右移n位相當於除以
的n次方
)>>>(無符號右移)
運算規則
按二進制形式把所有的數字向右移動對應位數
低位移出(捨棄)
高位的空位補零
其他結構和》相似
位移運算通常用來對代碼進行速度上的優化
用它來代替乘除法將是很好的選擇
下面來舉幾個例子
希望對大家使用位移運算符有所幫助
用位移運算符來實現 i /
=
+
+
所以對i /
可以這樣來表示
( i 《
) + ( i 《
) + ( i 《
)
寫出( q 《
) + ( q 《
)實現的代碼
原式 = q *
^
+ q *
^
= q * (
+
) = q *
From:http://tw.wingwit.com/Article/program/Java/hx/201311/26978.html