1.运算符
01逻辑运算符
在此之前,已经简单介绍了算术运算符、比较运算符、赋值运算符、接下来本节将对逻辑运算符、位运算符、三元运算符进行介绍。
01.01逻辑运算符包括哪些?
&(与) , |(或者) , !(非) , ^(异或) , &&(短路与) , ||(短路或)。
逻辑运算符的运算结果是布尔类型。
01.02逻辑与运算
逻辑与(&) 运算两端只有左右两端同时为true,其最终结果才是true ,只要任意一端为false其最终结果都是false。
public class Yu {
public static void main(String[] args) {
int a=34;
int b=23;
boolean f=a>b & a==b;
System.out.println(f);
}
}
运行结果:false.
01.03逻辑或运算
或者(|)的运算两端,只要任意一端为true其最终结果就为true,只有运算两端都为false了其最终结果就是false。
01.04逻辑非运算
逻辑非(|)取反 true变false ,false变true。
public static void main(String[] args) {
System.out.println(!true);
}
运行结果:false。
特点:偶数个不改变本身。
01.05逻辑异或运算
^(异或) 相同为false 不同为true。
true^false 结果是 true false^true 结果是true true^true false^false 结果是false。
public static void main(String[] args) {
System.out.println(false ^ false);
System.out.println(false ^ true);
}
运行结果:false和true。
01.06逻辑与(&&)运算
&(并且)和&&的区别:
& 左右两端的表达式都需要执行;
&& 当左端为false 右端的表达式就执行了 ,&& 当左端为true时,右端的表达式还是有执行的。
01.07逻辑或(||)运算
|(或者) 和 ||(短路或) 的区别:
| 他两端的表达式都需要执行;
|| 当左端为true时,右端的表达式就不执行了;
|| 当左端为false时,右端的表达是还是要执行的。
注意事项:
a:逻辑运算符一般用于连接boolean类型的表达式或者值。
在Java中我们要表示一个数大于3并且小于6 ,不可以写成3<x<6,应该写成 x>3 & x<6 。
b:表达式:就是用运算符把常量或者变量连接起来的符合java语法的式子。
算术表达式:a + b
关系表达式:a == b
02位运算符
02.01位运算符有哪些
&(与),|(或),^(异或) , ~(按位取反) , <<(左移) ,>>(右移) ,>>>(无符号右移)
==注意事项:==位运算是直接对二进制补码进行运算。运算效率高一些。
02.02 &(与),|(或),^(异或)
& | ^ 如果两端是数值,就是位运算符,& | ^ 如果两端是布尔类型,那就是逻辑运算符
注意事项:位运算是直接对二进制补码进行运算。运算效率高一些。
&:有0则0,例如:3&4
0 0000011
0 0000100
|:有1则1,例如:3|4
0 0000011
0 0000100
^:相同则0,不同则1,例如:3 ^ 4
0 0000011
0 0000100
^ 一个数,被另一个数位异或两次该数不变。自己跟自己位异或 结果是0。
02.03~(按位取反) , <<(左移) ,>>(右移) ,>>>(无符号右移)
-
~:按位取反 0 变1, 1 变0 符号位也包含在内取反。
例如: 0 0000011 它的补码 1 1111100 再取反。 -
(左移)<< 例如:把3左移两位 (3<<2),被移除的高位丢弃,空位补0。
例如:把 << 左边的数据乘以2的移动次幂 例如 10 << 3 结果 10 * 2 ^ 3 = 80
-
(右移)>> 例如:(-3 >> 2)
被移位的二进制最高位是0,右移后,空缺位补0;最高位是1,高位补1。
例如:把 >> 左边的数据除以2的移动次幂 例如 40 >> 3 结果 40 / 2 ^ 3 = 5。
4.>>>:无符号右移 被移位二进制最高位无论是0或者是1,空缺位都用0补。
例如:-3 >>> 2
02.04值交唤
方式1:通过 中间变量t,进行值交换,开发中常用,需要掌握。
public static void main(String[] args) {
int a = 10;
int b = 20;
int t=a;
a=b;
b=t;
System.out.println(a);
System.out.println(b);
}
方式2:利用^ 这个运算符 一个数被另一个数位异或两次该数不变。
public static void main(String[] args) {
int a = 10;
int b = 20;
a=a^b;
b=a^b;//a^b^b b=a;
a=a^b;//a^b^a a=b;
System.out.println(a);
System.out.println(b);
}
方式3;
public static void main(String[] args) {
int a = 10;
int b = 20;
a=a+b;
b=a-b;
a=a-b;
System.out.println(a);
System.out.println(b);
}
方式4:
public static void main(String[] args) {
int a = 10;
int b = 20;
a=(a+b)-(b=a);
System.out.println(a);
System.out.println(b);
}
03三元运算符
03.01三元(三目)运算符的格式
(关系表达式) ? 表达式1 : 表达式2;
例如:int a=(10>20)?30:50; a=50
03.02三元运算符的执行流程
计算关系表达式的值,如果为true, 运算后的结果是表达式1;
如果为false,运算后的结果是表达式2;
public static void main(String[] args) {
int a = 20;
int b = 20;
int c=500;
int max=a>b?a:b;
int max2=max>c?max:c;
System.out.println("最大值是"+max2);
//嵌套使用三元表达式,但是个人不建议嵌套,阅读性不好。
}
2. 键盘录入数据
01为什么要使用键盘录入数据
为了让程序的数据更符合开发的数据,或者让程序更灵活一下。
02键盘录入的格式
a:导包
格式:
import java.util.Scanner;
位置:
在class上面。
b:创建键盘录入对象
格式:
Scanner sc = new Scanner(System.in);
c:通过对象获取数据
格式:
int x = sc.nextInt();
即:
Scanner 类 可以做键盘录入,让用户来输入数据。
1.导入包
2.创建对象。
3.提示用户输入数据。
4.录入用户输入的数据。
5.处理数据。
例如:
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入第一个数");
int x = scanner.nextInt();
System.out.println("请输入第二个数");
int y = scanner.nextInt();
int max=x>y?x:y;
System.out.println("最大值是"+max);
}
运行结果:请输入第一个数
13
请输入第二个数
34
最大值是34