Java
day2——2023.8.5
运算符
算术运算符
表达式
用运算符连接起来的式子,比如:a + b ,a > 3
一元运算符
只需要一个数据就可以进行操作的运算符,例如:自增++,自减–,-负号
++表示让某个值自身加一
——表示让某个值自身减一
++和——可以写在变量之前,也可以写在变量之后,写法:a++或者++a
++在前和在后面的区别:
1.如果是自身的运算,结果无区别
2.如果是做混合计算,存在区别
a++,先将a参与表达式运算,然后再给自身加一
++a,先将a自身加一,再把a代入表达式
package com.iweb.airui369.day02.operator;
public class Demo01 {
public static void main(String[] args) {
int a = 10;
int b;
// a++; //11
// ++a; //11
System.out.println(a++); //10
System.out.println(a); //11
}
}
练习
int a = 10;
int b = a++; b=10
int c = --b; c=9 b=9
int d = ++c + b++; 10 +9
abcd的值 11 10 10 19
package com.iweb.airui369.day02.operator;
public class Exercise1 {
public static void main(String[] args) {
int a = 10;
int b = a++;
int c = --b;
int d = ++c + b++;
System.out.println(a); //11
System.out.println(b); //10
System.out.println(c); //10
System.out.println(d); //19
}
}
二元运算符
需要两个数据才可以进行操作的运算符,例如:加法+,赋值=
四则运算 + - * /
加法:+
如果是数字类型使用+,那么就是求和
如果是char类型使用+,那么会将char转为对应的数值(ascii码值)参与计算
如果字符串类型使用+,那么会将后面的内容,拼接到字符串内容后面
减法:-
没有特殊的用法,用来给数值求差值
乘法:*
用来给数值求乘积
除法:/
用来给数值求商,整数参与运算后,会将结果的小数部分省略,保留整数部分
求余:%
用来求两个数值之间的余数
int a1 = 11, b1 = 10 ,c1 = 10,d1 = 19;
System.out.println(a1 + b1); //21
System.out.println('a' + 10); //97+10=107
System.out.println("100" + 10); //10010
System.out.println(100 / 3); //33
System.out.println(2.55 / 3.25); //0.7846153846153846
System.out.println(100 % 3); //1
练习
有一个五位数,12345,希望这个数字与10做运算,得出这个五位数的个十百千万位的值
package com.iweb.airui369.day02.operator;
public class Exercise2 {
public static void main(String[] args) {
int x = 12345;
int a = x % 10; //个位
int b = (x /10) % 10; //十位
int c = (x / 10/ 10) % 10; //百位
int d = (x / 10/ 10/ 10) % 10; //千位
int e = (x / 10/ 10/ 10/ 10) % 10; //万位
System.out.println("个位的值是:" + a);
System.out.println("十位的值是:" + b);
System.out.println("百位的值是:" + c);
System.out.println("千位的值是:" + d);
System.out.println("万位的值是:" + e);
}
}
关系运算符
关系运算符也可以称为“比较运算符”,用于用来比较判断两个变量或者常量的大小,结果是true或者false
> , >= , < , <= , ==
package com.iweb.airui369.day02.operator;
public class Demo02 {
public static void main(String[] args) {
//比较运算符
int a = 10,b = 20;
System.out.println(a > b ); //F
System.out.println(b < a ); //T
System.out.println(b >= a ); //T
//比较常量
System.out.println(a > 5 ); //T
//和多个数值比较
//System.out.println(5 < a < 20 ); //不允许写在一起
System.out.println(a > 5 && a < 20 );
//==判断数值是否相等
//直接比较基本类型
System.out.println(10 == 10 ); //T
System.out.println(a == 10 ); //T
System.out.println(a == b ); //F
System.out.println('a' == 97 ); //T
//System.out.println("10" == a); //字符串不能和基本类型使用==比较
System.out.println(a % 2 == 0 ); //T
}
}
逻辑运算符(短路现象)
把各个运算的关系表达式连接起来组成一个复杂的逻辑表达式,以判断程序中的表达式是否成立,判断结果为true或者false
&& 逻辑与(短路与)
|| 逻辑或(短路或)
! 逻辑取反
& 逻辑与
| 逻辑或
package com.iweb.airui369.day02.operator;
public class Demo03 {
public static void main(String[] args) {
//逻辑运算符
//&&将多个表达式连接起来,如果每个表达式结果都是true,最终的结果为true
int a = 10,b = 20;
System.out.println(a > 5 && b > 10 ); //true
System.out.println(a < 5 && b > 10); //false
//&将多个表达式连接起来,如果每个表达式结果都是true,最终的结果为true
System.out.println(a > 5 && b > 10 ); //true
System.out.println(a < 5 && b > 10); //false
//短路效果,&&中,前面的表达式如果是false,后面的表达式就不会执行了
System.out.println(a < 5 && b++ > 10 ); //a<5了,后面的表达式不再执行了,这里的b++没有执行
System.out.println(b); //20
System.out.println(a < 5 & b++ > 10 );
System.out.println(b); //21
// ||逻辑或,如果表达式都为false,结果都为false,有一个为true,最终结果为true
System.out.println(a < 5 || b > 10 ); //true
System.out.println(a < 5 | b > 10 ); //true
//||短路效果,前面表达式为true,后面表达式不再计算了
System.out.println(a > 5 || b++ < 10);
System.out.println(b); //21
//!逻辑取反,值为true,取反后为false,值是false,取反后为true
System.out.println(!(a > 5 )); //false
System.out.println(!true); //false
}
}
位运算符(二进制)
& 位与运算符
连接两个数值进行运算,将数值转成二进制后,按位做运算,如果同时为1,结果为1,否则为0
举例:100&20
0110 0100
0001 0100
0000 0100
| 位或运算符
连接两个数值进行运算,将数值转成二进制后,按位做运算,有一位为1,结果为1,否则为0
举例:100|20
0110 0100
0001 0100
0111 0100
^位异或运算符
连接两个数值进行运算,将数值转成二进制后,按位做运算,位不同为1,位相同为0
举例:100^20
0110 0100
0001 0100
0111 0000
~位取反运算符
只对一个数值进行运算,将数值转成2进制后,对补码进行运算,运算完之后,再将补码变回原码
正数的原码,反码,补码都是一样的
举例:~100
原码:0110 0100
取反:1001 1011
减一:1001 1010
取反:1110 0101
举例:~100
原码:1110 0100
反码:1001 1011
补码(反码+1):1001 1100
补码取反:0110 0011
package com.iweb.airui369.day02.operator;
public class Demo04 {
public static void main(String[] args) {
System.out.println(100 & 20);
System.out.println(100 | 20);
System.out.println(100 ^ 20);
System.out.println(~100);
System.out.println(~-100);
}
}
位移运算符(二进制)
把数值,转为二进制后,往左或者往右移动指定的位数
>> 右移位运算符
<< 左位移运算符
//位移运算
//0000 0010 往左移4位 0010 0000 32
System.out.println(2 << 4 ); //2 * 2^4
//右位移运算符
//0010 0000 往右移2位 0000 1000 8
System.out.println(32 >> 2 ); //32/ 2^2
赋值运算符
=,+=,-=,*=,/=,%=
int a = 10; 将10赋值给a这个变量
package com.iweb.airui369.day02.operator;
public class Demo05 {
public static void main(String[] args) {
//赋值运算符
//=,+=,-=,*=,/=,%=
//a += 2; 表示 a = a + 2;
int a = 10;
a += 5; //a = a + 5; =左边的a,表示a这个变量名, =右边的a,表示找上面的a变量代入到这里
System.out.println(a); //15
a -= 5; //a = a - 5;
System.out.println(a); //10
a *= 5; //a = a * 5;
System.out.println(a); //50
a /= 5; //a = a / 5;
System.out.println(a); //10
a %= 3; //a = a % 3;
System.out.println(a); //1
}
}
三元运算符(三目运算符):嵌套使用
语法:变量 = 表达式 ? 值1 :值2;
如果前面的表达式的结果是true,最终的变量的结果就是值1,如果是false,变量的结果就是值2
package com.iweb.airui369.day02.operator;
public class Demo06 {
public static void main(String[] args) {
//三元运算符
//声明一个变量a = 10,声明一个变量b,如果a > 20,那么b的值等于a,否则b的值等于20;
int a = 10;
int b;
b = a > 20 ? a : 20;
System.out.println(b);
//价格计算,如果购买的物品价格超过了500,那么结算总价就打9折,否则就按照原价结算
int price = 600;
double total = price > 500 ? price * 0.9 : price;
System.out.println(total);
//定义 x = 10, y = 20,z = 30,使用三元表达式,找出a,b,b中的最大值
int x = 10,y = 20,z = 30;
int max = (x > y) ? (x > z ? x : z) : (y > z ? y : z);
System.out.println("最大值是" +max);
}
}
Scanner(键盘录入)
Scanner 是一个类,这个类是由系统写好了,提供给我们使用的
我们在使用的时候,需要去把这个类的包导入进来,然后就可以使用它了
1,导包
import java.util.Scanner;
2,创建对象
Scanner sc = new Scanner(System.in);
3,使用对象,调用方法,获取到输入的值
int a = scanner.nextInt();
package com.iweb.airui369.day02.operator;
import java.util.Scanner;
public class Dem08 {
public static void main(String[] args) {
// 给Scanner取别名,随意取!
Scanner abc = new Scanner(System.in);
System.out.println("请输入a的值:");
int a = abc.nextInt(); //用户可以自由赋值给 a(在int范围内)
System.out.println("请输入b的值:");
int b = abc.nextInt(); //用户可以自由赋值给 b(在int范围内)
System.out.println("a + b 的值为:" + (a + b ));
}
}