java基础——3.运算符(0基础学java)

java基础

🚀🚀🚀

3. 运算符

3.1 运算符介绍

运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等。

🔻

  1. 算术运算符

  2. 赋值运算符

  3. 关系运算符 [比较运算符]

  4. 逻辑运算符

  5. 位运算符 [需要二进制基础]

  6. 三元运算符

🔺

3.2 算术运算符

算术运算符是对数值类型的变量进行运算的,在 Java 程序中使用的非常多。

算术运算符有哪些?📣

image-20210831223438070

案例演示

image-20210901210429319

🅾️: 除法/

//  除法/使用
    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

面试题

image-20210901234514845

1️⃣: i = i ++ ,实际上先把i = 1 赋给了一个临时变量 temp,然后 i 再自增1,最后又把 临时变量 temp 赋给了 i 。所以结果仍然是1.

2️⃣: i = ++ i,运算时是先自增,故 i先++到2 ,然后再赋给临时变量temp,最后再把temp赋给 i 。故结果 是 2.

练习1

image-20210901235848282结果🔻 :

i = 10 i2 = 20

i = 19 i2 = 19

练习2

image-20210902000833886

//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 关系运算符(比较运算符)

  1. 关系运算符的结果都是 boolean 型,也就是要么是 true,要么是 false

  2. 关系表达式经常用在 if 结构的条件中或循环结构的条件中

🔻:关系运算符一览

image-20210902132259589

案例演示

	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 

image-20210902133142749

3.4 逻辑运算符

用于连接多个条件(多个关系表达式),最终的结果也是一个==boolean 值==。

🔻:逻辑运算符一览

分为两组学习

  1. 短路与 && , 短路或 ||,取反 !

  2. 逻辑与 &,逻辑或 | , ^ 逻辑异或

image-20210902133939918

👉 逻辑运算规则:

  1. a&b :当 a 和 b 同时为 true ,则结果为 true, 否则为 false

  2. a&&b : 当 a 和 b 同时为 true ,则结果为 true,否则为 false

  3. a|b : 当 a 和 b ,有一个为 true ,则结果为 true,否则为 false

  4. a||b: 当 a 和 b ,有一个为 true ,则结果为 true,否则为 false

  5. !a : 叫取反,或者非运算。当 a 为 true, 则结果为 false,

    当 a 为 false 是,结果为 true

  6. 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

练习题

⭕️image-20210902150410491

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

⭕️

image-20210902154309933

🐱结果为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; 】

image-20210902160420535

详解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 运算符的优先级

大致了解,不用刻意去背

image-20210906164248598image-20210906164431718

3.8 标识符命名规则与规范

image-20210906165824107

image-20210906170222666

image-20210906173606878

3.9 关键字与保留字

关键字的定义和特点 (不用背)

定义:被 Java 语言赋予了特殊含义,用做专门用途的字符串(单词)

特点:关键字中所有字母都为小写

image-20210906185028122 image-20210906185056354

保留字

Java 保留字:现有 Java 版本尚未使用,但以后版本可能会作为关键字使用。自己命名标识符时要避免使用这些保留

字 byValue、cast、future、 generic、 inner、 operator、 outer、 rest、 var 、 goto 、const

3.10 键盘输入

介绍: 在编程中,需要接收用户输入的数据,就可以使用键盘输入语句来获取。Input.java , 需要一个 扫描器(对象), 就是

Scanner

步骤 :

  1. 导入该类的所在包, java.util.*

  2. 创建该类对象(声明变量)

  3. 调用里面的功能

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 不区分大小写。

图示:

image-20210906193445477

image-20210906193503921

进制的转换

👇

image-20210906193915901

(1):其他进制转10进制

image-20210906194415040

image-20210906195008197

image-20210906195300767

(2)10进制转其他进制

image-20210906195613367

image-20210906232030419

image-20210907190713801

(3) 2进制转其他进制

image-20210907213828605

image-20210907214328629
(4)其他进制转2进制

image-20210907215416581

image-20210907215713954

3.12 原码、反码、补码(重点 难点)

image-20210907223142629

🐙: 重点 : 计算机运行时都是以补码的方式来运算的,但是最后的结果是要转换成原码来表示的

3.13 位运算

​ java 中有 7 个位运算(&、|、^、~、>>、<<和 >>>),位运算也都是以补码的方式来运算的

image-20210907223733670
//位运算


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
	}
}
image-20210907230720821

3.14 本章作业

image-20210907231743005

image-20210907231837340

image-20210907232039354

🔚🔚🔚🔚😸

在校学生,0基础学习java,如有问题,请多指教(^U^)ノ~YO
后续会继续更新哒,如果对博主感兴趣,麻烦点个关注和👍哟!😄😄😄
🚀🚀🚀

在这里插入图片描述

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值