Java位運算符介紹


位運算符

位運算符主要是針對二進制的,它包括了”&“(按位與)、”|“(按位或)、”~“(按位非)、”^“(按位異或)四種。

& 按位與

兩個二進制按位比對,若同位上都是1,才返回1,否則返回0,最后返回新的二進制。以1(0001)和3(0011)為例,返回的結果是1(0001)。示例如下:

System.out.println(1 & 3); // 1 

|  按位或

兩個二進制按位比對,若同位上都是0,才返回0,否則返回1,最后返回新的二進制。以1(0001)和3(0011)為例,返回的結果是3(0011)。示例如下:

System.out.println(1 | 3); // 3 

~ 按位非

一個二進制進行取反,若位上為1,則返回0,否則返回1,最后返回新的二級制。以3(0011)為例,返回的結果是-4(1100)。示例如下:

System.out.println(~3); // -4

^ 按位異或

兩個二進制按位比對,若同位上都是相同的數字(0或1),才返回0,否則返回1,最后返回新的二進制,以1(0001)和3(0011)為例,返回的結果是2(0010)。示例如下:

System.out.println(1 ^ 3); // 2 

二進制除了位運算符還有移位運算符。

移位運算符

移位運算符包括了”<<“(左移)、”>>“(帶符號的右移)、”>>>“(無符號的右移)。在移位運算時,byte、short和char類型移位后的結果會變成int類型,對byte、short、char和int進行移位時,規定實際移動的次數是移動次數和32的余數,也就是移位33次和移位1次得到的結果相同。移位long型的數值時,規定實際移動的次數是移動次數和64的余數,也就是移動66次和移動2次得到的結果相同。

<< 左移運算符

按二進制形式把所有的數字向左移動對應的位數,高位移出(舍棄),低位的空位補零。以3(0000 0011)為例,左移2位,返回的結果為(12)0000 1100。示例:

System.out.println(3 << 2); // 12 
System.out.println(3 << 34); // 12

>> 帶符號的右移

按二進制形式把所有的數字向左移動對應的位數,低位移出(舍棄),高位的空位補符號位,即正數補零,負數補1。以3(0000 0011)為例,帶符號右移1位,返回的結果為(1)0000 0001。示例:

System.out.println(3 >> 1); // 1 
System.out.println(3 >> 33); // 1
System.out.println(Integer.toBinaryString(-3)); // 11111111111111111111111111111101
System.out.println(Integer.toBinaryString(-3 >> 1)); // 11111111111111111111111111111110
System.out.println(-3 >> 1); // -2
System.out.println(-3 >> 34); // -1
>>> 無符號的右移

按二進制形式把所有的數字向左移動對應的位數,低位移出(舍棄),高位的空位補零。以3(0000 0011)為例,帶符號右移1位,返回的結果為(1)0000 0001。示例:

System.out.println(3 >>> 1); // 1 
System.out.println(3 >>> 34); // 0
System.out.println(Integer.toBinaryString(-3>>>1)); // 01111111111111111111111111111110
System.out.println(-3 >>> 1); // 2147483646
System.out.println(-3 >>> 34); // 1073741823



注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com