1.运算符和表达式
运算符:对字面量或变量进行操作的符号
表达式:用运算符把字面量或变量连接起来,符合java语法的狮子
不同运算符链接的表达式体现的是不同类型的表达式
算数运算符 | |
自增自减运算符 | |
赋值运算符 | |
关系运算符 | |
逻辑运算符 | |
三元运算符 |
1.1算数运算符
符号 | 作用 |
+ | 加 |
- | 减 |
* | 乘 |
/ | 除 |
% | 取模、取余 |
前三个运算符的用法:
public static void main(String[] args) {
System.out.println(3+2);//5
System.out.println(5-1);//4
System.out.println(7*9);//63
//如果计算时有小数参与
/*
结论:
在代码中如果有小数参与计算,有可能不精确
*/
System.out.println(1.1+1.01);//2.1100000000000003
System.out.println(1.1 -1.01);//0.09000000000000008
System.out.println(1.1*1.01);//1.1110000000000002
}
后两个用法:
public static void main(String[] args) {
/*
结论:
整数擦浴计算,结果只有整数
小数参与计算,结果可能不精确
*/
// 除法
System.out.println(10/2);//5
System.out.println(10/3);//3
System.out.println(10.0/3);//3.3333333333333335
// 取模
System.out.println(10%2);//0
System.out.println(10%3);//1
/*
应用场景:
可以用取模判断,A是否可以被b整除
判断a是否为偶数
a%2 == 0证明为偶数
*/
结论:
- 整数擦浴计算,结果只有整数
- 小数参与计算,结果可能不精确
练习:数值拆分
需求:键盘录入一个三位数,将其拆分为个位、十位、百位,打印在控制台
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个三位数");
int number = sc.nextInt();
System.out.println("百位: "+ (number/100%10));
System.out.println("十位: "+ (number/10%10));
System.out.println("个位: "+ (number%10));
}
1.1.1 + 操作的三种情况
- 数字相加
- 字符串相加
- 字符相加
数字运算时,数据类型不同不能运算,需要转换成一样才能运算。
1.1.2 类型转换的分类
1.1.2.1 隐式转换(自动类型提升)
把一个取值范围小的数值转换为取值范围大的数据。
隐式转换的两种提升规则
- 取值范围小的先提升为取值范围大的,在进行计算
- byte short char 三种类型在运算时都是先提升为int,然后在运算。
1.1.2.2 小结
1.1.1.2 字符串的“+” 操作
练习:看代码说结果
1.1.1.3 字符的“+” 操作
1.1.2算数运算符小结:
1.2 自增自减运算符
public static void main(String[] args) {
//++和--
int a = 10;
a++;
System.out.println(a);
++a;
System.out.println(a);
a--;
System.out.println(a);
--a;
System.out.println(a);
}
练习:自增自减练习
public static void main(String[] args) {
int x = 10;
int y = x++;
int z = ++x;
System.out.println(x);//12
System.out.println(y);//10
System.out.println(z);//12
}
1.3 赋值运算符
分类:
符号 | 作用 | 说明 |
= | 赋值 | int a=10,将10赋值给变量a |
+= | 加后赋值 | 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 |
注意:
+=,-=,*=,/=,%= 的底层都隐藏了一个强制类型转换。
1.4 关系运算符
练习:
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("你的时髦度");
int man = sc.nextInt();
System.out.println("nv");
int woman = sc.nextInt();
boolean result = man >woman;
System.out.println(result);
}
1.5 逻辑运算符
分类:
1.5.2 短路逻辑运算符
当左边的表达式能最终锁定结果,那么右边的不会参与运行。
练习:
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入数字1");
int a = sc.nextInt();
System.out.println("请输入数字2");
int b =sc.nextInt();
boolean c = (a == 6||b == 6||(a+b)%6 == 0);
System.out.println(c);
}
1.6 三元运算符
练习一:
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入第一只老虎的体重");
int i = sc.nextInt();
System.out.println("请输入第二只老虎的体重");
int j = sc.nextInt();
System.out.println(i == j? "相同":"不同");
}
练习二:
public static void main(String[] args) {
int heigit1 = 150;
int heigit2 = 210;
int heigit3 = 165;
int temp = heigit1 > heigit2? heigit1:heigit2;
int max = temp>heigit3? temp:heigit3;
System.out.println(max);
}
1.7 运算符的优先级
2.1 原码反码补码
原码:十进制数据的二进制表现形式,最左边是符号位。0为正,1为负。
利用原码对正数计算不会有问题。
反码:为解决原码不能计算负数的问题而出现的。
计算规则:正数的反码不变,负数的反码在原码的基础上,符号位不变、数值取反、0变1、1变0.
补码:
补充说明: