文章目录
java基础
🚀🚀🚀
3. 运算符
3.1 运算符介绍
运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等。
🔻
-
算术运算符
-
赋值运算符
-
关系运算符 [比较运算符]
-
逻辑运算符
-
位运算符 [需要二进制基础]
-
三元运算符
🔺
3.2 算术运算符
算术运算符是对数值类型的变量进行运算的,在 Java 程序中使用的非常多。
算术运算符有哪些?📣
案例演示
🅾️: 除法/
// 除法/使用
System.out.println(10 / 4); //从数学来看是2.5, java中 2
System.out.println(10.0 / 4); //java是2.5
double d = 10 / 4;//java中10 / 4 = 2, 2=>2.0
System.out.println(d);// 是2.0
🅾️: 取模 %(取余)
取模的本质是一个公式:a % b = a - a / b * b
// -10 % 3 => -10 - (-10) / 3 * 3 = -10 + 9 = -1
// 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.println(-10 % 3); // -1
System.out.println(10 % -3); //1
System.out.println(-10 % -3);//-1
🅾️: ++的使用
前置++:先自增,再使用
后置++:先使用,后自增
//++的使用
int i = 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;
//System.out.println("k=" + k + "j=" + j);//9 9
int k = j++; // 等价 k =j;j=j+1;
System.out.println("k=" + k + "j=" + j);//8 9
面试题
1️⃣: i = i ++ ,实际上先把i = 1 赋给了一个临时变量 temp,然后 i 再自增1,最后又把 临时变量 temp 赋给了 i 。所以结果仍然是1.
2️⃣: i = ++ i,运算时是先自增,故 i先++到2 ,然后再赋给临时变量temp,最后再把temp赋给 i 。故结果 是 2.
练习1
结果🔻 :
i = 10 i2 = 20
i = 19 i2 = 19
练习2
//1.需求:
//假如还有59天放假,问:合xx个星期零xx天
//2.思路分析
//(1) 使用int 变量 days 保存 天数
//(2) 一个星期是7天 星期数weeks: days / 7 零xx天leftDays days % 7
//(3) 输出
//3.走代码
int days = 25911;
int weeks = days / 7;
int leftDays = days % 7;
System.out.println(days + "天 合" + weeks + "星期零"
+ leftDays + "天");
//1.需求
//定义一个变量保存华氏温度,华氏温度转换摄氏温度的公式为
//:5/9*(华氏温度-100),请求出华氏温度对应的摄氏温度
//
//2思路分析
//(1) 先定义一个double huaShi 变量保存 华氏温度
//(2) 根据给出的公式,进行计算即可5/9*(华氏温度-100)
// 考虑数学公式和java语言的特性
//(3) 将得到的结果保存到double sheShi
//3走代码
double huaShi = 1234.6;
double sheShi = 5.0 / 9 * (huaShi - 100);
System.out.println("华氏温度" + huaShi
+ " 对应的摄氏温度=" + sheShi);
3.3 关系运算符(比较运算符)
-
关系运算符的结果都是 boolean 型,也就是要么是 true,要么是 false
-
关系表达式经常用在 if 结构的条件中或循环结构的条件中
🔻:关系运算符一览
案例演示
int a = 9; //提示: 开发中,不可以使用 a, b
int b = 8;
System.out.println(a > b); //ture
System.out.println(a >= b); //ture
System.out.println(a <= b); //false
System.out.println(a < b);//false
System.out.println(a == b); //false
System.out.println(a != b); //ture
boolean flag = a > b;
System.out.println("flag=" + flag); //flag=ture
3.4 逻辑运算符
用于连接多个条件(多个关系表达式),最终的结果也是一个==boolean 值==。
🔻:逻辑运算符一览
分为两组学习
-
短路与 && , 短路或 ||,取反 !
-
逻辑与 &,逻辑或 | , ^ 逻辑异或
👉 逻辑运算规则:
-
a&b :当 a 和 b 同时为 true ,则结果为 true, 否则为 false
-
a&&b : 当 a 和 b 同时为 true ,则结果为 true,否则为 false
-
a|b : 当 a 和 b ,有一个为 true ,则结果为 true,否则为 false
-
a||b: 当 a 和 b ,有一个为 true ,则结果为 true,否则为 false
-
!a : 叫取反,或者非运算。当 a 为 true, 则结果为 false,
当 a 为 false 是,结果为 true
-
a^b: 当 a 和 b 不同时,则结果为 true, 否则为 false,(异或异为真)
&&和&的区别
两者输出的结果都相同,但是运算的逻辑不同
对于&&(短路与),如果第一个条件为 false ,后面的条件不再判断
对于&(逻辑与),如果第一个条件为 false ,后面的条件仍然会判断
int a = 4;
int b = 9;
//&
if(a < 1 & ++b < 50)
{
System.out.println("ok300");//不输出
}
System.out.println("a=" + a + " b=" + b);//a=4b=10
//&&
int a = 4;
int b = 9;
if(a < 1 && ++b < 50)(++b没有判断)
{
System.out.println("ok300");//不输出
}
System.out.println("a=" + a + " b=" + b);//a=4b=9
| 和 || 的区别
对于||(短路或),如果第一个条件为 ture ,后面的条件不再判断
对于|(逻辑或),如果第一个条件为 ture ,后面的条件仍然会判断
int a = 4;
int b = 9;
// |
if( a > 1 | ++b > 4) {
System.out.println("ok300");//输出
}
System.out.println("a=" + a + " b=" + b); //4 10
// ||
int a = 4;
int b = 9;
if( a > 1 || ++b > 4) {
System.out.println("ok300");//输出
}
System.out.println("a=" + a + " b=" + b); //4 9
🅾️:开发中, 我们使用的基本是使用短路与&&和短路或||, 效率高
! 和 ^(逻辑异或)
//! 操作是取反 T->F , F -> T
System.out.println(60 > 20); //T
System.out.println(!(60 > 20)); //F
//a^b: 叫逻辑异或,当 a 和 b 不同时,则结果为true, 否则为false
boolean b = (10 > 1) ^ ( 3 > 5);
System.out.println("b=" + b);//T
练习题
⭕️
1️⃣ : if语句中x++是后置++,故先使用后自增,所以 一开始x=5和6比较为假,比较完后x自增为6,++y先自增为6,再和6比较为真,而因为是逻辑与,所以if语句为假,不执行x=11。故结果为x=6,y=6。
2️⃣:同1,x++ == 6为假,因为是短路与,所以不执行后面语句,if语句也为假。故结果为x=6,y=5。
3️⃣: if语句中x++是后置++,故先使用后自增,所以 一开始x=5和5比较为真,比较完后x自增为6,++y先自增为6,再和5比较为假,而因为是逻辑或,所以 if语句为真,执行x =11.故结果为x =11,y=6
4️⃣:同3,x++ == 5 为真,因为是短路或,不执行后面语句,if语句也为真,故结果为x =11,y=5
⭕️
🐱结果为z=50。解释:第一个if语句 z++== 46为真之后,z再自增1到47,y=ture(重点⁉️ )为真,因为这里不是 “==” 而是 “=”,一个等号是赋值,即把ture赋给了y这个布尔类型,为真,故第一个if语句为真,执行z++,此时z=48;第二个if语句x=false为假,++z先自增到49再使用,49 == 49,为真,故第二个if语句为真,执行z++,z=50。
3.5 赋值运算符
赋值运算符就是将某个运算后的值,赋给指定的变量。
分为两类👇
基本赋值运算符 =,[int a = 10]
复合赋值运算符 += ,-= ,*= , /= ,%= 等 , 重点讲解一个 += ,其它的使用是一个道理
a += b; 等价 【a = a + b; 】
a -= b; 等价 【a = a - b; 】
详解4️⃣:
byte b =3;
b += 2;//等价于b = (byte)(b+2)
/*b = b+2 运行则会报错,因为byte类型
参加运算会提升至int类型,int类型赋值给byte会报错
*/
b++; //同理等价于 b= (byte)(b+1);
3.6 三元运算符
基本语法
条件表达式 ? 表达式 1: 表达式 2;
运算规则:
1️⃣ :如果条件表达式为 true,运算后的结果是表达式 1;
2️⃣ :如果条件表达式为 false,运算后的结果是表达式 2;
😑
public class TernaryOperator {
//编写一个main方法
public static void main(String[] args) {
int a = 10;
int b = 99;
// 解读
// 1. a > b 为 false
// 2. 返回 b--, 先返回 b的值,然后在 b-1
// 3. 返回的结果是99
int result = a > b ? a++ : b--;
System.out.println("result=" + result); //99
System.out.println("a=" + a); //10
System.out.println("b=" + b); //98
}
}
使用细节👇
1️⃣ 表达式 1 和表达式 2 要为可以赋给接收变量的类型(或可以自动转换) 【参照自动类型转换】
2️⃣ 三元运算符可以转成 if–else 语句
//表达式1和表达式2要为可以赋给接收变量的类型
//(或可以自动转换/或者强制转换)
int a = 3;
int b = 8;
//int c = a > b ? 1.1 : 3.4;//不行,1.1和3.4都是double类型,不能赋给int类型
double d = a > b ? a : b + 3;//可以的,满足 int -> double
//三元运算符可以转成 if--else 语句
int a = 3;
int b = 8;
//int result = a > b ? a++ : b--;
if(a > b)
result = a++;
else
result = b--;
练习
求三个数中最大值
public class TernaryOperatorExercise {
//编写一个main方法
public static void main(String[] args) {
//案例:实现三个数的最大值
int n1 = 553;
int n2 = 33;
int n3 = 123;
//思路
//1. 先得到 n1 和 n2 中最大数 , 保存到 max1
//2. 然后再 求出 max1 和 n3中的最大数,保存到 max
int max1 = n1 > n2 ? n1:n2;
int max = max1 > n3 ? max1:n3;
System.out.println("max"+ max);
}
}
3.7 运算符的优先级
大致了解,不用刻意去背
3.8 标识符命名规则与规范
3.9 关键字与保留字
关键字的定义和特点 (不用背)
定义:被 Java 语言赋予了特殊含义,用做专门用途的字符串(单词)
特点:关键字中所有字母都为小写
保留字
Java 保留字:现有 Java 版本尚未使用,但以后版本可能会作为关键字使用。自己命名标识符时要避免使用这些保留
字 byValue、cast、future、 generic、 inner、 operator、 outer、 rest、 var 、 goto 、const
3.10 键盘输入
介绍: 在编程中,需要接收用户输入的数据,就可以使用键盘输入语句来获取。Input.java , 需要一个 扫描器(对象), 就是
Scanner
步骤 :
-
导入该类的所在包, java.util.*
-
创建该类对象(声明变量)
-
调用里面的功能
import java.util.Scanner;//表示把java.util下的Scanner类导入
public class Input {
//编写一个main方法
public static void main(String[] args) {
//演示接受用户的输入
//步骤
//Scanner类 表示 简单文本扫描器,在java.util 包
//1. 引入/导入 Scanner类所在的包
//2. 创建 Scanner 对象 , new 创建一个对象,体会
// myScanner 就是 Scanner类的对象
Scanner myScanner = new Scanner(System.in); //System.in就是从键盘输入
//3. 接收用户输入了, 使用 相关的方法
System.out.println("请输入名字");
//当程序执行到 next 方法时,会等待用户输入~~~
String name = myScanner.next(); //接收用户输入 字符串
System.out.println("请输入年龄");
int age = myScanner.nextInt(); //接收用户输入 int
System.out.println("请输入薪水");
double sal = myScanner.nextDouble(); //接收用户输入double
System.out.println("人的信息如下:");
System.out.println("名字=" + name
+ " 年龄=" + age + " 薪水=" + sal);
}
}
3.11 进制(程序员的基本功)
进制介绍
对于整数,有四种表示方式:
二进制:0,1 ,满 2 进 1.以 0b 或 0B 开头。
十进制:0-9 ,满 10 进 1。
八进制:0-7 ,满 8 进 1, 以数字 0 开头表示。
十六进制:0-9 及 A(10)-F(15),满 16 进 1. 以 0x 或 0X 开头表示。此处的 A-F 不区分大小写。
图示:
进制的转换
👇
(1):其他进制转10进制
(2)10进制转其他进制
(3) 2进制转其他进制
(4)其他进制转2进制
3.12 原码、反码、补码(重点 难点)
🐙: 重点 : 计算机运行时都是以补码的方式来运算的,但是最后的结果是要转换成原码来表示的
3.13 位运算
java 中有 7 个位运算(&、|、^、~、>>、<<和 >>>),位运算也都是以补码的方式来运算的
//位运算
public class BitOperator {
//编写一个main方法
public static void main(String[] args) {
//看老师的推导过程
//1. 先得到 2的补码 => 2的原码 00000000 00000000 00000000 00000010
// 2的补码 00000000 00000000 00000000 00000010
//2. 3的补码 3的原码 00000000 00000000 00000000 00000011
// 3的补码 00000000 00000000 00000000 00000011
//3. 按位&
// 00000000 00000000 00000000 00000010
// 00000000 00000000 00000000 00000011
// 00000000 00000000 00000000 00000010 & 运算后的补码
// 运算后的原码 也是 00000000 00000000 00000000 00000010
// 结果就是 2
System.out.println(2&3);//2
//推导
//1. 先得到 -2的原码 10000000 00000000 00000000 00000010
//2. -2的 反码 11111111 11111111 11111111 11111101
//3. -2的 补码 11111111 11111111 11111111 11111110
//4. ~-2操作 00000000 00000000 00000000 00000001运算后的补码
//5. 运算后的原码 就是 00000000 00000000 00000000 00000001 => 1
System.out.println(~-2);//1
//推导
//1. 得到2的补码 00000000 00000000 00000000 00000010
//2. ~2操作 11111111 11111111 11111111 11111101 运算后的补码
//3. 运算后的反码 11111111 11111111 11111111 11111100
//4. 运算后的原码 10000000 00000000 00000000 00000011=>-3
System.out.println(~2); //-3
}
}
3.14 本章作业
🔚🔚🔚🔚😸
在校学生,0基础学习java,如有问题,请多指教(^U^)ノ~YO
后续会继续更新哒,如果对博主感兴趣,麻烦点个关注和👍哟!😄😄😄
🚀🚀🚀