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