概述java
位運算符就是直接對二進制進行操做的運算符spa
主要有如下幾種:code
<<blog
左移class
符號位參與移動,空位補0,被移除的最高位捨去。二進制
通常正數每左移一位至關於原來的值*2數據
>>static
右移計算機
符號位不參與移動移動
當爲正數,空位補0,;當爲負數,空位補1
通常正數每右移一位至關於原來的值/2
>>>
無符號右移
符號位也參與移動,空位補0,被移除的捨去
二進制由0和1組成,通常的,0表明false,1表明true,因而按位運算至關於普通的邏輯運算了。
&
按位與
|
按位或
~
按位取反
^
按位異或
異或有一個特色,就是a^b = c; 則a^c能獲得b;b^c = a;
首先操做的是二進制,是什麼形式的二進制呢?
咱們知道java裏面數據是用二進制補碼的形式存儲的,也就是說操做的是數據的二進制補碼。
例子:
public class TestOperator3 { /* 00000011 3<< 00001100 00000011 3>> 00000001 -3 10000000 00000000 00000000 00000011 11111111 11111111 11111111 11111100 11111111 11111111 11111111 11111101 11111111 11111111 11111111 11111101 011111111 11111111 11111111 1111110 11111110 11111101 10000010 1表明true,0false & | ^ ~(!) 00000110 6&3 00000011 00000010 2 00000110 6|3 00000011 00000111 7 00000110 6^3 00000011 00000101 5 注意:位運算符進行運算符號位也參與 00000110 ~6 11111001 11111000 10000111 -7 */ public static void main(String[] args) { /* i = 3<<2; System.out.println(i); i = 3>>1; System.out.println(i); i = 3>>>1; System.out.println(i); byte i = (byte)(-3>>>1); System.out.println(i); //2147483646 //2147483646 System.out.println(0b01111111111111111111111111111110); */ System.out.println(6&3); System.out.println(6|3); System.out.println(6^3); System.out.println(~6); } }
通常按位運算是速率最快的,由於計算機內是使用二進制進行運算的,而位運算直接操做的是二進制。