一 移位运算符
“ < <”, “> > ”, “> > > ”在Java中是左移、有符号右移和无符号右移运算符。
(1)左移动运算符(< <):
会将操作的数向左边移动,移动的位的个数由左操作数指定,左移后,低位会被自动补零(0)。
(2)右移动运算符(> > ):
反过来,把操作数向右移动,移动的位个数同样由右操作数指定。注意:面对带正负号的数,会采用符号扩展,如果原值是正数,则高位补上0;如果原值是负数,高位补1。
(3)无正负号的右移运算符(>>>):
采用0补充,意思就是说,无论是正号还是负号,都在高位补0。
(4)注意,没有<<<这个运算符
(5)对于正数和负数,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方。
测试的小例子:
public class Test6 { /** * * * * @param args */ public static void main(String[] args) { int a1 = 16 << 2; System.out.println(a1); int a2 = 16 >> 2; System.out.println(a2); int b1 = 15 >> 2; System.out.println(b1); int a3 = -16 << 2; System.out.println(a3); int a4 = -16 >> 2; System.out.println(a4); int a5 = -16 >>> 2; System.out.println(a5); int a6 = 16 >>> 2; System.out.println(a6); byte c1 = 'a'; System.out.println(c1 << 2); char c2 = 'b'; System.out.println(c2 << 2); short c3 = 1; System.out.println(c3 << 2); } }
结果:
64
4
3
-64
-4
1073741820
4
388
392
4
二 逻辑运算符
1, 逻辑运算符有“与”(AND)、“或”(OR)、“异或(XOR )”、“非(NOT)”,分别用“&”、“|”、“^”、“~”表示。
2, &运算规则:如果两个运算数都是为1,则结果为1。否则,其他情况下,结果都为0。
3, |运算规则:任意一个运算数为1,则结果为1。
4, ^运算规则:两个运算数不同时,则结果为1。否则,结果为0。
5, ~运算规则:对运算数的每一位取反。
public class Test7 { /** * * @param args */ public static void main(String[] args) { int i = 1; int x = 2; int y = 3; char c = 4; byte t = 2; System.out.println(i & x); System.out.println(i | x); System.out.println(i ^ x); System.out.println(~i); System.out.println(c & t); System.out.println(c | t); System.out.println(c ^ t); System.out.println(~c); } }
结果:
0
3
3
-2
0
6
6
-5
3.算术运算符
(byte、short和char)进行算术运算后,结果会自动提升成int类型。
byte b1 = 1; byte b2 = 2; byte b3 = b1+b2;//这句话编译的时候报 int类型不能转换byte类型 int i1 = b1+b2;
&&和&的区别,其实在进行逻辑与运算时,既可以使用&&也可以使用&,在功能上本身没有区别。两者区别的位置在,对于&来说,如果左侧条件为false,也会计算右侧条件的值,而对于&&来说,如果左侧的条件为false,则不计算右侧的条件,这种现象被称作短路现象。
优先级 运算符 结合性
1 () [] . 从左到右
2 ! +(正) -(负) ~ ++ -- 从右向左
3 * / % 从左向右
4 +(加) -(减) 从左向右
5 << >> >>> 从左向右
6 < <= > >= instanceof 从左向右
7 == != 从左向右
8 &(按位与) 从左向右
9 ^ 从左向右
10 | 从左向右
11 && 从左向右
12 || 从左向右
13 ?: 从右向左
14 = += -= *= /= %= &= |= ^= ~= <<= >>= >>>= 从右向左