运算符、表达式与语句
本章目标
掌握赋值运算符的使用
掌握算术运算符的使用
掌握关系运算符的使用
掌握递增与递减运算符的使用
掌握逻辑运算符的使用
掌握括号运算符的使用
掌握位运算符的使用
掌握各个运算符的优先级
运算符
Java中的语句有很多种形式,表达式就是其中一种形式。表达式是由操作数与运算符所组成:操作数可以是常量、变量也可以是方法,而运算符就是数学中的运算符号,如“+”、“-”、“*”、“/”、“%”等。以下面的表达式(z+100)为例,“z”与“100”都是操作数,而“+”就是运算符。
赋值运算符号
一元运算符
算术运算符
关系运算符
递增与递减运算符
逻辑运算符
AND及 OR结果表
关于“&&”与“&”、“||”与“|”的说明
“&&”与“&”
——&&表示短路与
——对于“与”来说,要求所有的条件都判断,而如果使用“短路与”如果第一个条件为false,则后面的条件将不再判断。
“||”与“|”
——||表示短路或
——对于“或”来说,要求所有的条件都判断,而如果使用“短路或”如果第一个条件为true,则后面的条件将不再判断。
括号运算符
位运算符
位运算的结果表
位运算
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
* */
}
操作步骤
求出负数的反码
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中也提供了左移“<<”及右移“>>”两种操作。
左移操作是将运算数的二进制码整体左移指定位数,左移之后的空位使用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
* */
}
右移操作
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
* */
}
运算符的优先级
简洁的表达式