一:算术运算符
+ | 正号;加;连接运算 |
- | 负号;减 |
* | 乘 |
/ | 除(取商) |
% | 取余 |
++ | 自增 |
-- | 自减 |
public class test3 {
public static void main(String[] args) {
int a=5,b=4;
System.out.println("a is"+a); //正号
System.out.println("-b is"+(-b)); //负号
System.out.println("a+b is"+(a+b)); //加法
System.out.println("a-b is"+(a-b)); //减法
System.out.println("a*b is"+a*b); //乘法
System.out.println("a/b is"+a/b); //除法,因为是int型计算结果自动为int值为1
System.out.println("a%b is"+a%b); //取余
System.out.println(a++); //先赋值后运算,输出值为5,内部存储值为6
System.out.println(++a); //先运算后赋值,输出值为7,内部存储值为7
System.out.println(b--); //先运算后赋值,输出值为4,内部存储值为3
System.out.println(--b); //先运算后赋值,输出值为2,内部存储值为2
System.out.println("He"+"llo"); //字符串连接运算,输出 Hello
}
}
二:赋值运算符
a=b | 赋值 |
a+=b | 相当于a=a+b |
a-=b | 相当于a=a-b |
a*=b | 相当于a=a*b |
a/=b | 相当于a=a/b |
a%=b | 相当于a=a%b |
public class Test4 {
public static void main(String[] args) {
int a=1,b=2;
System.out.println(a=b); //2
System.out.println(a+=b); //4
System.out.println(a-=b); //2
System.out.println(a*=b); //4
System.out.println(a/=b); //2
System.out.println(a%=b); //0
}
}
三 :比较运算符
== | 等于 |
< | 小于 |
<= | 小于等于 |
> | 大于 |
>= | 大于等于 |
!= | 不等于 |
a | b | a&b | a&&b | a|b | a||b | !a | a^b |
true | true | true | true | true | true | false | false |
true | false | false | false | true | true | false | true |
false | true | false | false | true | true | true | true |
false | false | false | false | false | false | true | false |
public class Test5 {
public static void main(String[] args) {
int x=1,y=1;
if(x++==2 & ++y==2){ //false&true
x =6; //false 不执行
}
System.out.println("x="+x+",y="+y); //x=2,y=2
if(x++==3 && ++y==3){ //false&&不判断
x =6; //false
}
System.out.println("x="+x+",y="+y); //x=3,y=2
if(x++==3 | ++y==3){ //true|true
x =6; // true
}
System.out.println("x="+x+",y="+y); //x=6,y=3
if(x++==6|| ++y==5){ //true||不判断
x =10; //true
}
System.out.println("x="+x+",y="+y); //x=10,y=3
}
}
五:位运算符
<< | 左移 | 3<<2=12 |
>> | 右移 | 4>>1=2 |
>>> | 无符号右移 | 4>>>1=2 |
& | 与 | 3&2=2 |
| | 或 | 3|2=3 |
^ | 异或 | 3^2=1 |
~ | 取反 | ~3=-4 |
<< 左移3<<2
0000 0011 左移两位,低位补0 0000 1100
>> 右移 4>>1 符号位是0补0,是1补1
0000 0100 >>1 0000 0010
1000 0101>>1 1100 0010
>>> 无符号右移 4>>1 符号位不论是0,是1,都补0
0000 0100>>>1 0000 0010
1000 0101>>>1 0100 0010
&与 二进制位进行&运算,只有1&1时结果是1,否则是0; 3&2=2
3 0000 0011
2 0000 0010
3&2 0000 0010
||或 二进制位进行 | 运算,只有0 | 0时结果是0,否则是1; 3|2=3
3 0000 0011
2 0000 0010
3|2 0000 0011
3 0000 0011
2 0000 0010
3^2 0000 0001
~取反 各二进制码按补码各位取反 ~3=-4
3 0000 0011
取反 1111 1100 高位为1,这是负数的补码
补码减一 1111 1011
求原码 1000 0100 值为-4
六:三元运算符
(a>b)? a:b;当a>b时返回a反之返回b
七,运算符优先级
1 | . , ; () {} | |
2 | ++ -- ~ ! +正 -负 | 自右向左 |
3 | * / % | 自左向右 |
4 | +加 -减 | 自左向右 |
5 | << >> >>> | 自左向右 |
6 | < > <= >= instanceof | 自左向右 |
7 | == != | 自左向右 |
8 | & | 自左向右 |
9 | ^ | 自左向右 |
10 | | | 自左向右 |
11 | && | 自左向右 |
12 | || | 自左向右 |
13 | ? : | 自右向左 |
14 | = += -= *= /= %= <<= >>= >>>= &= ^= != | 自右向左 |