Java复习知识点四:
Java中的运算符
Java中有哪几种运算符?
- 算术运算符
- 关系运算符(比较运算符)
- 逻辑运算符
- 赋值运算符
- 位运算符
- 三元运算符
1、算术运算符
算术运算符是对数值类型的变量进行运算
1.1使用细节
除:
System.out.println(5 / 2);
//输出结果为 2
System.out.println(5.0 / 2);
//输出结果为 2.5
取模(取余):a % b = a - a / b * b
在运算 % 时,看成一个公式!!!
a % b = a - a / b * b
-10 % 3 => -10 - (-10) / 3 * 3 = -10 + 9 = -1
10 % -3 => 10 - 10 / (-3) * (-3) = 10 - 9 = 1
System.out.println(-10 % 3);// -1
System.out.print1n(10 % -3); //1
system.out.println( -10 % -3);//-1
自增 ( i++)
-
作为独立语句使用时
int 1 = 10; i++; //自增等价于i = i + 1; => i = 11 ++i; //自增等价于i =i + 1; => i =12 System.out.println( "i=" + i); //12
-
作为表达式使用时
/* 作为表达式使用 前++∶++i先自增后赋值后++: i++先赋值后自增 */ int j = 8; //int k = ++j; //等价j=j+1;k=j; int k = j++; //等价k =j;j=j+1; System.out.println("k=" +k+“j=” +j); //89
经典例题:
int i = 1;
i = i++;
System.out.println(i);//输出为 1
int i = 1;
i = ++i;
System.out.println(i);//输出为 2
2、关系(比较)运算符
- 关系运算符的结果都是boolean型,也就是要么是true,要么是false
- 关系表达式经常用在if结构的条件中或循环结构的条件中
3、逻辑运算符
3.1运算规则:
对于短路与(&&)和 短路或(||),如果第一个条件为false(true),后面的条件将不会再执行判断 效率高
对于逻辑与(&)和 逻辑或(|),如果第一个条件为false(true),后面的条件也会再执行判断 效率低
!逻辑非:取反
^ 逻辑异或:不同为true,相同为false
开发中基本使用 短路
4、赋值运算符
赋值运算符就是将某个运算后的值,赋给指定的变量
-
基本赋值运算符
=
-
复合赋值运算符
+= 、 -= 、 *= 、/= 、%=
4.1 赋值运算符特点:
-
赋值运算符的左边只能是变量,右边可以是变量、表达式、常量值
-
复合赋值运算符会进行类型转换
byte b = 3; b += 2;//等价于 b = (byte)(b + 2); b++; //等价于 b = (byte)(b + 1); //如果像下面这样写,会报错 byte b = 3; b = b + 2;
5、位运算符
分为两组:
- 按位与 &:两位全为1,结果为1,否则为0
- 按位或 |:两位有一个为1,结果为1,否者为0
- 按位异或 ^ :两位不相同,结果为1,相同为0
- 按位取反~:0 - >1,1 -> 0
- 算术右移 >>:本质是 除以2
- 正数,右移直接丢弃最低位,在高位补对应个数的0;
- 负数,右移直接丢弃最低位,在高位补对应个数的1;
- 算术左移 <<:本质是 乘以2
- 正数和负数,左移直接丢弃最高位,在低位补对应个数的0;
- 逻辑右移(无符号右移):右移直接丢弃最低位,在高位补对应个数的0,即使最高位原来是1;
按位与&计算过程:
按位取反~计算过程:
6、三元运算符
基本语法:
条件表达式 ? 表达式1 : 表达式2;
运算规则:
- 如果条件表达式为true, 运算后的结果是表达式1;
- 如果条件表达式为false,运算后的结果是表达式2;
真1假2
例:
int a = 10;
int b = 11;
int result = a > b ? a++ : b--;
System.out.println(result);//输出11
6.1使用细节:
表达式1和表达式2要为可以接收的类型的变量(或者可以自动类型转换的变量)
错误例子:
int a = 3;
int b = 4;
int c = a > b ? 1.1 : 2;
//错误 double类型的数值1.1 不可赋值给int类型的变量c
//可以强转 int c = a > b ? (int)1.1 : 2;
练习
实现三个数的最大值
int n1 = 23;
int n2 = 33;
int n3 = 43;
int max = (n1 > n2 ? n1 : n2) > n3 ?
(n1 > n2 ? n1 : n2) : n3;