首先,移位運算符有三種,其操作類型只支持:byte / short / char / int和long五種。 << 左移運算符,表示將左邊的操作數的二進位數據向左移動*位,移動後空缺位以0填充,多餘位捨棄。(等同於乘2的n次方) >> 右移運算符,二進位數據向右移動*位,就在其二進位數據後抹掉幾位? ...
首先,移位運算符有三種,其操作類型只支持:byte / short / char / int和long五種。
<< 左移運算符,表示將左邊的操作數的二進位數據向左移動*位,移動後空缺位以0填充,多餘位捨棄。(等同於乘2的n次方)
>> 右移運算符,二進位數據向右移動*位,就在其二進位數據後抹掉幾位?(這裡還不錯定,但個人理解是這樣的)(等同於除2的n次方)
>>> 無符號右移運算符,不管移動前最高位是0還是1,右移後左側產生的空位部分都以0來填充。
下麵我們借一個demo幫助理解:
public static void main(String[] args){ int a = 16; int b = a << 2;//左移2,等同於16 * 2的2次方,也就是16 * 4 int c = a >> 2;//右移2,等同於16 / 2的2次方,也就是16 / 4 System.out.println("a的二進位數據為:" + Integer.toBinaryString(a)); System.out.println("a左移後二進位數據為:" + Integer.toBinaryString(b)); System.out.println("a右移後二進位數據為:" + Integer.toBinaryString(c)); System.out.println("a左移後的值為:" + b); System.out.println("a右移後的值為:" + c); } }
查看運行結果,如圖所示:
首先,16的二進位數據為:10000;
左移兩位,10000變成1000000;
右移兩位,10000變成100;
把得到的二進位數據轉換成普通數據後,
a左移後的值為64,既16 * 2的2次方(16 * 4)。
a右移後的值為4,既16 / 2的2次方(16 / 4)。
看完這個demo再理解移位運算符是不是就簡單很多?