首先,移位運算符有三種,其操作類型只支持: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再理解移位運算符是不是就簡單很多?