第3章 运算符


提示:此为本人学习笔记

第3章 运算符

3.1 运算符介绍

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

运算符有:

  1. 算术运算符
  2. 赋值运算符
  3. 关系运算符 [比较运算符]
  4. 逻辑运算符
  5. 位运算符 [需要二进制基础]
  6. 三元运算符

3.2 算术运算符

算术运算符是对数值类型的变量进行运算的,在 Java 程序中使用的非常多。
在这里插入图片描述

/*** 演示算术运算符的使用 */
public class ArithmeticOperator {
    //编写一个 main 方法
    public static void main(String[] args) {
        //使用
        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;
        int k = j++; // 等价 k =j;j=j+1;
        System.out.println("k=" + k + "j=" + j);//8 9
    }
}

1.对于除号" / ",它的整数除和小数除是有区别的:整数之间做除法时,只保留整数部分而舍弃小数部分。
2. 当对一个数取模(%)时,可以等价a % b = a - a / b * b,这样我们可以看到取模的一个本质运算。
3. 当自增当做一个独立语言使用时,++i 等价于 i++;

思考:

//  1.
 	int i = 10;
    i = i++;
    System.out.println(i); //结果是?
//  2.
 	int j = 10;
    j = ++j;
    System.out.println(j); //结果是?

3.3 关系运算符(比较运算符)

  1. 关系运算符的结果都是 boolean 型,也就是要么是 true,要么是 false
  2. 关系表达式 经常用在 if 结构的条件中或循环结构的条件中
    在这里插入图片描述
    演示:
//演示关系运算符的使用 
public class RelationalOperator { 
	//编写一个 main 方法 
	public static void main(String[] args) {
		int a = 9; 
		int b = 8; 
		System.out.println(a > b);		 //T 
		System.out.println(a >= b); 	//T 
		System.out.println(a <= b); 	//F 
		System.out.println(a < b);		//F
		System.out.println(a == b); 	//F 
		System.out.println(a != b);		//T 
		boolean flag = a > b; 			//T 
		System.out.println("flag=" + flag);

  1. 关系运算符的结果都是 boolean 型,也就是要么是 true,要么是 false。
  2. 关系运算符组成的表达式,我们称为关系表达式。 a > b
  3. 比较运算符"==“不能误写成”="

3.4 逻辑运算符

用于连接多个条件(多个关系表达式),最终的结果也是一个 boolean 值。
在这里插入图片描述

  1. 短路与 && , 短路或 ||,取反 !
  2. 逻辑与 &,逻辑或 |,^ 逻辑异或

说明逻辑运算规则:

  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

3.4.1 && 和 & 基本规则

名称语法特点
短路与&&条件 1&&条件 2两个条件都为 true,结果为 true,否则 false
逻辑与&条件 1&条件 2两个条件都为 true,结果为 true,否则 false

&& 和 & 使用区别

  1. &&短路与:如果第一个条件为 false,则第二个条件不会判断,最终结果为 false,效率高
  2. &逻辑与:不管第一个条件是否为 false,第二个条件都要判断,效率低

3.4.2 || 和 | 基本规则 名称 语法 特点

名称语法特点
短路或 ll条件 1 ll 条件 2两个条件中只要有一个成立,结果为 true,否则为 false
逻辑或 l条件 1 l 条件 2只要有一个条件成立,结果为 true,否则为 false

|| 和 | 使用区别

  1. ||短路或:如果第一个条件为 true,则第二个条件不会判断,最终结果为 true,效率高
  2. | 逻辑或:不管第一个条件是否为 true,第二个条件都要判断,效率低
  3. 开发中,我们基本使用 ||

3.4.3 !取反 基本规则

名称语法特点
! 非(取反)!条件如果条件本身成立,结果为 false,否则为 true

3.4.4 ^ 逻辑异或

a^b: 叫逻辑异或,当 a 和 b 不同时,则结果为 true, 否则为 false
^逻辑异或,System.out.println( (4 < 1) ^ (6 > 3) ); // ?

3.4.5 练习

在这里插入图片描述
在这里插入图片描述

3.5 赋值运算符

赋值运算符就是将某个运算后的值,赋给指定的变量。

基本赋值运算符 = int a = 10;
 复合赋值运算符 += ,-= ,*= , /= ,%= 等 , 它们的使用是一个道理的

a += b; [等价 a = a + b; ]
a -= b; [等价 a = a - b; ]

赋值运算符特点

  1. 运算顺序从右往左 int num = a + b + c;
  2. 赋值运算符的左边 只能是变量,右边 可以是变量、表达式、常量值 int num = 20; int num2= 78 * 34 - 10; int num3 = a;
  3. 复合赋值运算符等价于下面的效果 比如:a+=3;等价于 a=a+3; 其他类推
  4. 复合赋值运算符会进行类型转换。 byte b = 2; b+=3; b++;

3.6 三元运算符

基本语法: 条件表达式 ? 表达式 1 : 表达式 2;
运算规则:

  1. 如果条件表达式为 true,运算后的结果是表达式 1;
  2. 如果条件表达式为 false,运算后的结果是表达式 2;

注意:

  1. 表达式 1 和表达式 2 要为可以赋给接收变量的类型(或可以自动转换)
  2. 三元运算符可以转成 if–else 语句

3.7 运算符优先级

  1. 运算符有不同的优先级,所谓优先级就是表达式运算中的运算顺序。如右表,上一行运算符总优先于下一行。
  2. 只有单目运算符、赋值运算符是从右向左运算的。
  3. 一览表, 不要背,使用多了,就熟悉了

在这里插入图片描述

3.8 标识符的命名规则和规范

凡是自己可以起名字的地方都叫标识符

标识符的命名规则(必须遵守):
1.由26个英文字母大小写,0-9,或$组成
2. 数字不可以开头。int 3ab =1;/错误
3. 不可以使用关键字和保留字,但能包含关键字和保留字。
4. Java中严格区分大小写,长度无限制。int totalNum = 10; int n = 90;
5.标识符不能包含空格。int a b = 90;

标识符命名规范[更加专业]

  1. 包名:多单词组成时所有字母都小写:aaa.bbb.ccc //比如 com.hsp.crm
  2. 类名、接口名:多单词组成时,所有单词的首字母大写:XxxYyyZzz [大驼峰] 比如: TankShotGame
  3. 变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写:xxxYyyZzz [小 驼峰, 简称 驼峰法] 比如: tankShotGame
  4. 常量名:所有字母都大写。多单词时每个单词用下划线连接:XXX_YYY_ZZZ 比如 :定义一个所得税率 TAX_RATE
  5. 后面我们学习到 类,包,接口,等时,我们的命名规范要这样遵守,更加详细的看文档

3.9 关键字

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

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

在这里插入图片描述
在这里插入图片描述

3.10 保留字

现有 Java 版本尚未使用,但以后版本可能会作为关键字使用。
byValue、cast、future、 generic、 inner、 operator、 outer、 rest、 var 、 goto 、const

3.11 键盘输入语句

步骤 :

  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 创建一个对象,
		Scanner myScanner = new Scanner(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.12 进制

对于整数,有四种表示方式:
二进制: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 不区分大小写)
在这里插入图片描述

3.12.1 进制转换的介绍

其他进制转换成十进制
规则:从最低位(右边)开始,将每个位上的数提取出来,乘以2【八进制就乘8】的(位数-1)次方,然后求和。

例:0x23A = 10 * 16^0 + 3 * 16 ^ 1 + 2 * 16^2 = 10 + 48 + 512 = 570
//练习:
0b110001100 转成 十进制 
02456 转成十进制 
0xA45 转成十进制

十进制转换成其他进制
规则:将该数不断除以 2【八进制就是除以8】,直到商为 0 为止,然后将每步得到的余数倒过来,就是对应的二进制。
在这里插入图片描述

练习:
123 转成 二进制 => ?
678 转成八进制 => ?
8912 转成十六进制 => ?

二进制转换成八进制、十六进制
规则:从低位开始,将二进制数每三位【四位】一组,转成对应的八进制【十六进制】数即可。
案例:
ob11(3)010(2)101(5) => 0325
ob1101(D)0101(5) = 0xD5

八进制、十六进制转换成二进制
规则:将八进制【十六进制】数每 1 位,转成对应的一个 3 位【4位】的二进制数即可

练习:请将
01230 转成 二进制
0xAB29 转成二进制

3.12.2 位运算的思考题

public static void maiin(String []args) { 
	int a=1>>2; // 1 向右位移 2 位 
	int b=-1>>2;//算术右移 
	int c=1<<2;//算术左移 
	int d=-1<<2;// 
	int e=3>>>2;//无符号右移 
	//a,b,c,d,e 结果是多少 
	System.out.println("a="+a); 
	System.out.println("b="+b); 
	System.out.println("c="+c); 
	System.out.println("d="+d); 
	System.out.println("e="+e); 
}

练习:
~2=? // 按位取反
2&3=?// 2 按位与 3
2|3=?
~-5=?
13&7=?
5|4=?

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

对于有符号的而言:

  1. 二进制的最高位是符号位:0表示正数, 1表示负数(老韩口诀: 0->01-> -)
  2. 正数的原码,反码,补码都一样(三码合一)
  3. 负数的反码=它的原码符号位不变,其它位取反(0->1,1->0)
  4. 负数的补码=它的反码+1,负数的反码=负数的补码-1
  5. O的反码,补码都是0
  6. java没有无符号数,换言之,java中的数都是有符号的
  7. 在计算机运算的时候,都是以补码的方式来运算的.
  8. 当我们看运算结果的时候,要看他的原码(重点)

Java的数都是有符号的

3.14 位运算符

java 中有 7 个位运算(&、|、^、~、>>、<<和 >>>)
在这里插入图片描述

有 3 个位运算符 >>、<< 和 >>> , 运算规则:

  1. 算术右移 >>:低位溢出,符号位不变,并用符号位补溢出的高位
  2. 算术左移 <<: 符号位不变,低位补 0
  3. >>> 逻辑右移也叫无符号右移,运算规则是: 低位溢出,高位补 0
  4. 特别说明:没有 <<< 符号

3.15 本章练习

1.计算下列表达式的结果
10/3 = 3 ; 10/5 = 2 ; 10%2=0 ; -10.5%3 = ?;
//a % b当a是小数时,公式= a- (int)a / b *b
//-10.5%3 = -10.5 -(-10)/3 * 3= -10.5+9= -1.5
//注意:有小数运算,得到结果是近似值

2.试写出将String转换成double类型的语句,以及将char类型转换成String的语句,举例说明即可,写简单代码
String str = "18.8";//注意字符串要可以被转成double
double d1 = Double.parseDouble(str);
char c1 ='韩";
String str2 =c1 +"";

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值