本章目标
掌握赋值运算符的使用
掌握算术运算符的使用
掌握关系运算符的使用
掌握递增与递减运算符的使用
掌握逻辑运算符的使用
掌握括号运算符的使用
掌握位运算符的使用
掌握各个运算符的优先级

 

运算符
Java中的语句有很多种形式,表达式就是其中一种形式。表达式是由操作数与运算符所组成:操作数可以是常量、变量也可以是方法,而运算符就是数学中的运算符号,如“+”、“-”、“*”、“/”、“%”等。以下面的表达式(z+100)为例,“z”与“100”都是操作数,而“+”就是运算符。

运算符、表达式与语句_二进制数


 

赋值运算符号

运算符、表达式与语句_java_02


运算符、表达式与语句_System_03


 一元运算符

运算符、表达式与语句_二进制数_04


 

算术运算符 

运算符、表达式与语句_java_05

 

关系运算符

运算符、表达式与语句_java_06


 

递增与递减运算符

运算符、表达式与语句_运算符_07


 

逻辑运算符

运算符、表达式与语句_java_08

 

AND及 OR结果表

运算符、表达式与语句_java_09


 

 关于“&&”与“&”、“||”与“|”的说明
“&&”与“&”
——&&表示短路与
——对于“与”来说,要求所有的条件都判断,而如果使用“短路与”如果第一个条件为false,则后面的条件将不再判断。
“||”与“|”
——||表示短路或
——对于“或”来说,要求所有的条件都判断,而如果使用“短路或”如果第一个条件为true,则后面的条件将不再判断。

 

括号运算符

运算符、表达式与语句_java_10


 位运算符

运算符、表达式与语句_二进制数_11


 位运算的结果表

运算符、表达式与语句_二进制数_12


 

位运算

public class OperatorDemo15 {
	public static void main(String[] args) {
		int x=3;//3的二进制数据: 00000000 00000000 00000000 00000011
		int y=6;//6的二进制数据: 00000000 00000000 00000000 00000110
		System.out.println(x&y);//与操作的结果: 00000000 00000000 00000000 00000010
		System.out.println(x|y);//或操作的结果: 00000000 00000000 00000000 00000111
		System.out.println(x^y);//与操作的结果: 00000000 00000000 00000000 00000101
	}
/*结果:
 * 3+5+4*6-7=25
 * (3+5+4)*(6-7)=-12
 * */
}

 

操作步骤

运算符、表达式与语句_运算符_13

求出负数的反码

public class OperatorDemo16 {
	public static void main(String[] args) {
		int x=-3; //-3的二进制数据: 11111111 11111111 11111111 11111101
		System.out.println(x+"的反码是:"+~x);
	}
/*结果:
 * -3的反码是:2
 * */
}

 

运算符、表达式与语句_java_14


 

 左移和右移
在Java中也提供了左移“<<”及右移“>>”两种操作。
左移操作是将运算数的二进制码整体左移指定位数,左移之后的空位使用0来填充
右移操作“>>”是将运算数的二进制码整体右移,右移之后空出来的位置以符号位填充。如果是整数使用“0”填充,如果是负数使用“1”填充。

 

左移操作

public class OperatorDemo17 {
	public static void main(String[] args) {
		int x=3;//3的二进制数据: 00000000 00000000 00000000 00000011
		System.out.println(x+"左移2位之后的内容:"+(x<<2));
	}
/*结果:
 * 3左移2位之后的内容:12
 * */
}

 

运算符、表达式与语句_System_15


 

 右移操作

public class OperatorDemo18 {
	public static void main(String[] args) {
		int x=3;//3的二进制数据: 00000000 00000000 00000000 00000011
		int y=-3; //-3的二进制数据: 11111111 11111111 11111111 11111101
		System.out.println(x+"左移2位之后的内容:"+(x>>2));
		System.out.println(y+"左移2位之后的内容:"+(y>>2));
	}
/*结果:
 * 3左移2位之后的内容:0
 * -3左移2位之后的内容:-1
 * */
}

 

无符号右移
以上的右移操作属于带符号位的右移操作,在Java中也提供了无符号的右移操作符“>>>”,使用此操作将以“0”填充空出来的位。

 

无符号右移

public class OperatorDemo19 {
	public static void main(String[] args) {
		int x=3;//3的二进制数据: 00000000 00000000 00000000 00000011
		int y=-3; //-3的二进制数据: 11111111 11111111 11111111 11111101
		System.out.println(x+"左移2位之后的内容:"+(x>>>2));
		System.out.println(y+"左移2位之后的内容:"+(y>>>2));
	}
/*结果:
 * 3左移2位之后的内容:0
 * -3左移2位之后的内容:1073741823
 * */
}

 

运算符、表达式与语句_二进制数_16


 运算符的优先级

运算符、表达式与语句_System_17


运算符、表达式与语句_java_18


  简洁的表达式

运算符、表达式与语句_java_19