3.1 算数运算符
- 取模 %
- 公式:a % b = a - a / b * b
- 当a是小数时:a % b = a - (int)a / b * b
- 自增 ++
int j = 8;
int k = ++j; //等价j = j + 1; k = j; k = j = 9
int g = j++; //等价g = j; j = j + 1; g = 8, j = 9
3.2 关系运算符
- instanceof:是否是类的对象
3.3 逻辑运算符
-
a&b : & 叫逻辑与:规则:当 a 和 b 同时为 true ,则结果为 true, 否则为 false
-
a&&b : && 叫短路与:规则:当 a 和 b 同时为 true ,则结果为 true,否则为 false
- &&短路与:如果第一个条件为 false,则第二个条件不会判断,最终结果为 false,效率高
- & 逻辑与:不管第一个条件是否为 false,第二个条件都要判断,效率低
-
a|b : | 叫逻辑或,规则:当 a 和 b ,有一个为 true ,则结果为 true,否则为 false
-
a||b : || 叫短路或,规则:当 a 和 b ,有一个为 true ,则结果为 true,否则为 false
- ||短路或:如果第一个条件为 true,则第二个条件不会判断,最终结果为 true,效率高
- | 逻辑或:不管第一个条件是否为 true,第二个条件都要判断,效率低
-
!a : 叫取反,或者非运算。当 a 为 true, 则结果为 false, 当 a 为 false 是,结果为 true
-
a^b: 叫逻辑异或,当 a 和 b 不同时,则结果为 true, 否则为 false
3.4 三元运算符
条件表达式 ? 表达式 1: 表达式2
- 如果条件表达式为 true,运算后的结果是表达式 1;
- 如果条件表达式为 false,运算后的结果是表达式 2;
3.5 运算符优先级
上一行运算符总优先于下一行
3.6 关键字与保留字(区别)
- 关键字:被 Java 语言赋予了特殊含义,用做专门用途的字符串(单词)
- 特点:关键字中所有字母都为小写
- 保留字:现有 Java 版本尚未使用,但以后版本可能会作为关键字使用
- 如: byValue、cast、future、 generic、 inner、 operator、 outer、 rest、 var 、goto、const
3.7 键盘输入语句
使用java.util中的Scanner类
import java.util.Scanner;
Scanner sc = new Scanner(System.in);
String name = sc.next(); //姓名
int age = sc.nextInt(); //年龄
double sal = sc.nextDouble(); //薪水
3.8 进制
- 二进制:0,1 ,满 2 进 1.以 0b 或 0B 开头。
- 十进制:0-9 ,满 10 进 1。
- 八进制:0-7 ,满 8 进 1. 以数字 0 开头表示。
- 十六进制:0-9 及 A(10)-F(15),满 16 进 1. 以 0x 或 0X 开头表示。此处的 A-F 不区分大小写。
3.9 原码、反码、补码
3.10 位运算
3.10.1 运算规则
- 算术右移 >>:低位溢出,符号位不变,并用符号位补溢出的高位
- 算术左移 <<: 符号位不变,低位补 0
- >>> 逻辑右移也叫无符号右移,运算规则是: 低位溢出,高位补 0
- 特别说明:没有 <<< 符号
3.11 练习
public class 位运算{
public static void main(String []args) {
int a=1>>2; // 1 向右位移 2 位
int b=-1>>2;//算术右移
int c=1<<2;//算术左移
int d=-1<<2;//
int e=3>>>2;//无符号右移
//a,b,c,d,e 结果是多少
System.out.println("a="+a); //0
System.out.println("b="+b); //-1
System.out.println("c="+c); //4
System.out.println("d="+d); //-4
System.out.println("e="+e); //0
}
}
-
2 & 3 = ? //用补码运算
- 2的补码:00000000 00000000 00000000 00000010
- 3的补码:00000000 00000000 00000000 00000011
- 按位与&:00000000 00000000 00000000 00000010
- 补码转换为原码:00000000 00000000 00000000 00000010
- 结果为2
-
~-2 = ?
- -2的原码:10000000 00000000 00000000 00000010
- -2的反码:11111111 11111111 11111111 11111101
- -2的补码:11111111 11111111 11111111 11111110
- 按位取反:00000000 00000000 00000000 00000001
- 补码转换为原码:00000000 00000000 00000000 00000001
- 结果为1
-
~2 = ?
- 2的原码: 00000000 00000000 00000000 00000010
- 2的补码: 00000000 00000000 00000000 00000010
- 按位取反:11111111 11111111 11111111 11111101
- 补码转换为反码:11111111 11111111 11111111 11111100(负数补码减一为反码)
- 反码转换为原码:10000000 00000000 00000000 00000011
- 结果为-3