Java语言定义了八种基本数据类型,围绕八种基本数据类型Java语言定义很多运算符,按照表达式中的操作数个数分为单目运算符、双目运算符和三目运算符;按照运算符的功能分为算术运算符、赋值运算符、关系运算符、逻辑运算符、位运算符和其他运算符。
算术运算符
单目运算:
~(按位取反)、! (取非)、-(负号运算符)、 ++(自增)、 - -(自减)
~按位取反例程
++ 与 - -
双目运算:
+ - * / %(取余)
三目运算:
a>b?true:false 说明:当a大于b的时候,为true,否则为false;
关系运算符
用于条件判断
==,!=,>=,<=,>,<
位与逻辑
与(&)、非(~)、或(|)、异或(^)
异或例程
异或运算 | 结果 |
true^ture | 0 |
– | – |
true^false | 1 |
– | – |
false^true | 1 |
– | – |
false^false | 0 |
– | – |
1^1 | 0 |
– | – |
1^0 | 1 |
– | – |
0^1 | 1 |
– | – |
0^0 | 0 |
– | – |
10^-5 | -15 |
位与和位或与上述位异或操作相同
逻辑运算符
与(&&)、非(!)、或(||)
上述例程说明使用||条件判断,只要前面条件为真,后面条件不再执行判断,而&&条件判断,前后的条件都需要判断
赋值运算符
= += -= *= /= %= &= ^= |= <<= >>=
public class HelloWorld
{
public static void main(String[] args)
{
int a = 0;
a+=10;//相等于a = a + 10 = 10;
System.out.println("Line7 a = "+a);
a-=5;//相等于a = a - 5 = 10-5=5;
System.out.println("Line9 a = "+a);
a%=3;//相等于a = a % 5 = 5%3=2;
System.out.println("Line11 a = "+a);
a*=3;//相等于a = a * 3 = 2*3=6;
System.out.println("Line13 a = "+a);
a/=6;//相等于a = a / 6 = 6*6=1;
System.out.println("Line15 a = "+a);
a&=5;//相等于a=a&5
//a = 00000001
//5 = 00000101
//& = 00000001=1
System.out.println("Line20 a = "+a);
a^=4;//相等于a=a^4
//a = 00000001
//4 = 00000100
//^ = 00000101 正数补码等于原码00000101=5
System.out.println("Line25 a = "+a);
a|=2;//相等于a=a|2
//a = 00000101
//2 = 00000010
//| = 00000111 正数补码等于原码00000111=7
System.out.println("Line30 a = "+a);
a<<=1;//相等于a=a<<1
//a = 00000111
//<<1 = 00001110 正数补码等于原码00001110=8+4+2=14
System.out.println("Lin34 a = "+a);
a>>=2;//相等于a=a>>2
//a = 00001110
//>>2 = 00000011 正数补码等于原码00000011=3
System.out.println("Line38 a = "+a);
}
}
位移运算符
<< 带符号左移 >>带符号右移 >>> 无符号右移
//带符号右移 正数右移,高位补0,负数右移高位补1
//无符号右移 无论是正数还是负数,高位通通补0
无符号右移可能导致数值越界,a>>>2返回Int类型,所以b>>>2=1073741822,如果1073741822%256=254,将254转化为byte类型等于-2
运算符优先级
优先级例程