day03
2-4运算符
算术运算符
运算符 | 运算 | 范例 | 结果 |
---|---|---|---|
+ | 正号 | +3 | 3 |
- | 负号 | b=4,-b | -4 |
+ | 加 | 5+5 | 10 |
- | 减 | 6-4 | 2 |
* | 乘 | 3*4 | 12 |
/ | 除 | 4/2 | 2 |
% | 取模 | 7%5 | 2 |
++ | a=2,a++ | 3 | |
++ | a=2,++a | 3 | |
– | |||
– | |||
+ |
/*
运算符之一:算术运算符
+ - + - * / % (前)++(后)++(前)--(后)-- +
*/
class AriTest {
public static void main(String[] args) {
//除号:/
int num1 = 12;
int num2 = 5;
int result1 = num1 / num2;
System.out.println(result1);
int result2 = num1/ num2 * num2;
System.out.println(result2);
double result3 = num1 / num2;
System.out.println(result3);
double result4 = num1 * 1.0 / num2;
System.out.println(result4);
//%:取余运算
//结果的符号与被模数的符号相同
//开发中,经常使用%来判断能否除尽的情况
int m1 = 12;
int n1 = 5;
System.out.println("m1 % n1 = " + m1 % n1);
//(前)++:先自增,后运算
//(后)++:先运算,后自增
//自增不会改变变量的数据类型
int a1 = 10;
int b1 = ++a1;
System.out.println("a1 = "+ a1 + ",b1 = " + b1);
int a2 = 10;
int b2 = a2++;
System.out.println("a2 = "+ a2 + ",b2 = " + b2);
//(前)--:先自减一,后运算
//(后)--:先运算,后自减一
}
}
赋值运算符
当"="两侧数据类型不一致的时候,可以使用自动类型转换或使用强制类型转换原则进行处理
扩展赋值运算符:+=,-=,*=,/=,%=
/*
运算符之二:赋值运算符
= += -= *= /= %= //不会改变数据类型
*/
class SetValueTest{
public static void main(String[] args) {
//赋值符号: =
int j1 = 10;
int i1 = 10;
int i2,j2;
//连续赋值
i2 = j2 = 10;
//**************************
int num1 = 10;
num1 +=2;
System.out.println(num1);//12
short s1 = 10;
//s1 = s1 + 2;//编译失败
s1 += 2;//不会改变数据类型
}
}
比较运算符
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Wigqx2YC-1655987847884)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220623101016943.png)]
比较运算的结果都是boolean型,也就是要么是true,要么是false。
/*
运算符之三:比较运算符
== != > < >= <= instanceof
*/
class CompareTest {
public static void main(String[] args) {
int i = 10;
int j = 20;
System.out.println(i == j);
System.out.println(i = j);
}
}
逻辑运算符
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3yXotB8H-1655987847885)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220623101516987.png)]
/*
运算符之四:逻辑运算符
& && | || ! ^
说明:
1.逻辑运算符操作的都是boolean类型的变量
*/
class LogicTest{
public static void main(String[] args) {
//区分& 和&&
//相同点,运算结果相同
//相同的2:当符号左边是true时,二者都会执行符号右边的运算
//不同点:当符号左边是false时,&继续执行,&&不再执行右边运算
boolean b1 = true;
b1 = false;
int num1 = 10;
if(b1 & (num1++ > 0)){
System.out.println("我现在在北京");
}else{
System.out.println("我现在在南京");
}
System.out.println("num1 = " + num1);
boolean b2 = true;
b2 = false;
int num2 = 10;
if(b1 && (num2++ > 0)){
System.out.println("我现在在北京");
}else{
System.out.println("我现在在南京");
}
System.out.println("num2 = " + num2);
// 区分 | 与 ||
//相同点,运算结果相同
//相同的2:当符号左边是false时,二者都会执行符号右边的运算
//不同点:当符号左边是true时,|继续执行,||不再执行右边运算
boolean b3 = false;
int num3 = 10;
if(b3 | (num3++ > 0)){
System.out.println("我现在在北京");
}else {
System.out.println("我现在在南京");
}
System.out.println("num3 = " + num3);
boolean b4 = false;
int num4 = 10;
if(b4 || (num4++ > 0)){
System.out.println("我现在在北京");
}else {
System.out.println("我现在在南京");
}
System.out.println("num4 = " + num4);
}
}
位运算符
位运算符是直接对整数的二进制的运算
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4zi9bsxE-1655987847886)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220623111103119.png)]
左移运算和右移运算,二进制向左或者向右移动
每次向左移动一位,相当于变成原来的二倍
/*
运算符之五:位运算符(了解)
结论:
1. 位运算操作的都是整型变量
2. << :在一定范围内,每向左移一位:相当于 * 2
>> : 在一定范围内,每向右移一位:相当于 / 2
面试题:最高效的计算2 * 8? 2 << 3 或 8 << 1
*/
class BitTest {
public static void main(String[] args) {
int i =21;
i = -21;
System.out.println("i << 2:" + (i << 2));
System.out.println("i << 27:" + (i << 27));
int m = 12;
int n = 5;
System.out.println("m % n :" + (m & n));
System.out.println("m | n :" + (m | n));
System.out.println("m ^ n :" + (m ^ n));
//练习: 交换两个变量的值
int num1 = 10;
int num2 = 20;
System.out.println("num1 = " + num1 + ", num2 = " + num2 );
//方式一:定义临时变量
//int temp = num1;
//num1 = num2;
//num2 = temp;
//System.out.println("num1 = " + num1 + ", num2 = " + num2 );
//方式二:好处:不用定义临时变量
//弊端:①相加操作可能超出存储范围②有局限性:只能适用于数值类型
//num1 = num1 + num2;
//num2 = num1 - num2;
//num1 = num1 - num2;
//System.out.println("num1 = " + num1 + ", num2 = " + num2 );
//方法三:使用位运算符
//有局限性:只能使用于数值型
num1 = num1 ^ num2;
num2 = num1 ^ num2;
num1 = num1 ^ num2;
}
}
三元运算符
格式:
-->(条件表达式)?表达式1:表达式2;
/*
运算符之六:三元运算符(三目运算符)
1.结构:(条件表达式)?表达式1:表达式2;
2.说明:
①条件表达式的结果位boolean类型
②根据条件表达式真或假,决定执行表达式1,还是表达式2,
如果表达式为true,执行表达式1
如果表达式为false,执行表达式2
③表达式1和表达式2要求
3.凡是可以使用三元运算符的地方都可以改写成 if……else
反之不成立
4.如果程序既可以用三元运算符,又可以使用if-else,那么优先选择三元运算符
*/
class SanYuanTest {
public static void main(String[] args) {
//获取两个整数的较大值
int m = 12;
int n = 5;
int max = (m > n) ? m : n;
System.out.println(max);
double num = (m > 2) ? 2 : 1.0;
//*******************************
String maxStr = (m > n) ? "m大" : "n大";
System.out.println(maxStr);
}
}
运算符的优先级
运算符有不同的优先级,所谓优先级就是表达式中运算符的运算顺序。如右表,上一行运算符总优先于下一行。
只有单目运算符、三元运算符、赋值运算符是从右往左运算的。
(m > n) ? m : n;
System.out.println(max);
double num = (m > 2) ? 2 : 1.0;
//*******************************
String maxStr = (m > n) ? "m大" : "n大";
System.out.println(maxStr);
}
}
### 运算符的优先级
运算符有不同的优先级,所谓优先级就是表达式中运算符的运算顺序。如右表,上一行运算符总优先于下一行。
只有单目运算符、三元运算符、赋值运算符是从右往左运算的。