1.运算符分类

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

    2.算术运算符

    数值类型进行运算的
    image.png

    注意:

    /:保留商部分

    sout(10 / 4) //2,整数运算结果为整数
    sout(10.0 / 4) //2.5,如果运算有一个位小数,那么运算结果一定是小数
    中心思想:运算结果精确到最高位
    double d = 10 / 2 //2.0 2->2.0

    %:保留余数部分

    %本质:a % b = a - a / b b
    sout(10 % 3) //1
    sout(-10 % 3) //-1
    sout(10 % -3) //1
    sout(- 10 % -3) //-1
    结论:取模符号只跟被除数有关
    当a是小数,a%b=a-(int)a/b
    b

    ++:i=i+1

    前++和后++独立使用:i=i+1
    作为表达式使用:
    前++:++i 先自增后赋值
    后++:i++ 先赋值后自增
    1. int j = 8;
    2. int k= ++j; //j=j+1,k=j //9
    3. int k= j++; //k=j,j=j+1 //8

    —:i=i-1

    类似++

    面试题

    1. //第一题
    2. int i = 1;
    3. i=i++; //规则使用临时变量:①temp=i;②i=i+1;③i=temp
    4. sout(i) //1
    5. //第二题
    6. int i = 1;
    7. i=++i; //规则使用临时变量:①i=i+1;②temp=i;③i=temp
    8. sout(i) //2

    练习

    ```java double huaShi = 1234.6; double sheShi = 5.0 / 9 * (huaShi - 100); System.out.println(“华氏温度” + huaShi
  • “ 对应的摄氏温度=” + sheShi); //如果是5/9那么结果为0,如果是5.0/9那么结果会保留小数 ```

    3.关系运算符(比较运算符)

    介绍

    1)关系运算符的结果都是 boolean 型,也就是要么是 true,要么是 false
    2)关系表达式经常用在 if 结构的条件中或循环结构的条件中

    关系运算符一览

    image.png
    = 赋值 == 比较相等
    常用6种 特殊一种:判断是否有一个实例是某类的对象:instanceof

    细节

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

    4.逻辑运算符

    介绍:

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

    逻辑运算符一览

分为两组学习
1) 短路与 && , 短路或 ||,取反 !
2) 逻辑与 &,逻辑或 |,^ 逻辑异或
image.png

说明逻辑运算规则:

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

&& 和 & 基本规则

名称语法特点:

  1. 短路与&& 条件 1&&条件 2 两个条件都为 true,结果为 true,否则 false
  2. 逻辑与& 条件 1&条件 2 两个条件都为 true,结果为 true,否则 false

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

|| 和 | 基本规则

名称 语法 特点

  1. 短路或|| 条件 1||条件 2 两个条件中只要有一个成立,结果为 true,否则为 false
  2. |逻辑或 条件 1|条件 2 只要有一个条件成立,结果为 true,否则为 false

|| 和 | 使用区别:
1) ||短路或:如果第一个条件为 true,则第二个条件不会判断,最终结果为 true,效率高
2) | 逻辑或:不管第一个条件是否为 true,第二个条件都要判断,效率低

总结:

短路与&&,第一个条件为false,结果为false
短路或||,第一个条件为true,结尾为true
逻辑与&or逻辑或|,二个条件都要判断
逻辑与关系混搭:比较是否为真假,只要执行了++一定要自增;前++执行时自增,后++执行后自增
注意:=赋值,==相等,比较的结果就是真或假

取反基本规则

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

逻辑异或

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

练习:

image.png
image.png
50

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++;

总结:

运算顺序从右到左;赋值左变右全,
b+=3和b++隐藏强制类型转换
byte b = 2;
b+=3; 等价b = (byte)(b+3)
b++; 等价b = (byte)(b+1)

6.三元运算符

基本语法: 条件表达式 ? 表达式 1: 表达式 2;

运算规则:

  1. 如果条件表达式为 true,运算后的结果是表达式 1;
    2. 如果条件表达式为 false,运算后的结果是表达式 2;
    口诀: [一灯大师: 一真大师]

使用细节 :

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

总结:
三元运算一真,二假
三元左右类型相等(or自动转换or强制转换)
三元和if-else可以互换

练习:

求最大值:

  1. int n1 = 55;
  2. int n2 = 33;
  3. int n3 = 123;
  4. int max1 = n1 > n2 ? n1 : n2;
  5. int max2 = max1 > n3 ? max1 : n3;
  6. System.out.println("最大数=" + max2);
  7. //组合
  8. int max = (n1 > n2 ? n1 : n2) > n3 ?
  9. (n1 > n2 ? n1 : n2) : n3;
  10. System.out.println("最大数=" + max);

7.运算符优先级

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

8.标识符的命名规则和规范

标识符的命名规则

image.png

总结:

数字不能开头
-不行,_才可以
严格区分大小写
不能用保留字

标识符的命名规范

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

总结:

大驼峰:类名、接口
小驼峰:变量名、方法名
所有字母大写:常量名(.连接)
所有字母小写:包名(_连接)

9.关键字

键字的定义和特点 ( 不用背)
定义:被 Java 语言赋予了特殊含义,用做 专门用途的字符串(单词)
特点:关键字中所有字母都为小写
image.png
image.png

10.保留字

介绍:
Java 保留字:现有 Java 版本尚未使用,但以后版本可能会作为关键字使用。
自己命名标识符时要避免使用这些保留 字 byValue、cast、future、 generic、 inner、 operator、 outer、 rest、 var 、 goto 、const

11. 键盘输入语句(重要)

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

步骤 :

1) 导入该类的所在包, java.util.*
2) 创建该类对象(声明变量)
3) 调用里面的功能

经典练习题(重要)

要求:从控制台接收用户信息(姓名,年龄,薪水)12

  1. import java.util.Scanner;
  2. public class Input{
  3. public static void main(String[] args){
  4. //System.in从键盘输入
  5. Scanner myScanner = new Scanner(System.in);
  6. System.out.println("请输入名字");
  7. //next方法:1.等待用户输入,2.接收用户输入数据
  8. String name = myScanner.next();
  9. System.out.println("请输入年龄");
  10. int age = myScanner.nextInt();
  11. System.out.println("请输入薪水");
  12. double sal = myScanner.nextDouble();
  13. System.out.println("人的信息如下:");
  14. System.out.println("名字=" + name
  15. + " 年龄=" + age + " 薪水=" + sal);
  16. }
  17. }

总结:

键盘输入:
创建对象并且从键盘输入Scanner(System.in)
调用方法next()并且用一个变量接收【字符串调用next(),其他七种nextXxx(),比如nextInt()】

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

课堂练习:

  1. int n1 = 0b1010;
  2. int n2 = 1010;
  3. int n3 = 01010;
  4. int n4 = 0x10101;
  5. System.out.println("n1=" + n1);
  6. System.out.println("n2=" + n2);
  7. System.out.println("n3=" + n3);
  8. System.out.println("n4=" + n4);

总结:

二进制:0b
八进制:0
十进制:无
十六进制:0x

13.进制图示:

image.png
image.png

14. 进制的转换(基本功)

第一组:
1) 二进制转十进制
2) 八进制转十进制
3) 十六进制转十进制
第二组:
1) 十进制转二进制
2) 十进制转八进制
3) 十进制转十六进制
第三组
1) 二进制转八进制
2) 二进制转十六进制
第四组
1) 八进制转二进制
2) 十六进制转二进制

进制转换

一、二八十六进制转十进制

15.二进制转十进制

image.png
算数步骤:
0b1011=12^(1-1)+12^(2-1)+02^(3-1)+12^(4-1)=1+2+0+8=11
总结:
二进制转十进制
0或1*2^(位数-1)

16.八进制转十进制

image.png
算数步骤:
0234=48^(1-1)+38^(2-1)+28^(3-1)=4+24+128=156
总结:
八进制转十进制
位数的数
8^(位数-1)
计算顺序:先指数后乘法0

17.十六进制转十进制

规则:

从最低位(右边)开始,将每个位上的数提取出来,乘以 16 的(位数-1)次方,然后求和。

案例: 请将 0x23A 转成十进制的数
0x23A=1016^(1-1)+316^(2-1)+2*16^(3-1)=10+48+512=570

课堂练习:

0b110001100 转十进制 396
02456 转十进制 1326
0xA45 转十进制 2629

二、十进制转二八十六进制

18.十进制转二进制

规则:

将该数不断除以 2,直到商为 0 为止,然后将每步得到的余数倒过来,就是对应的二进制。

案例:

请将 34 转成二进制 =>0B00100010 (一个字节8位)
image.png

19.十进制转八进制

规则:

将该数不断除以 8,直到商为 0 为止,然后将每步得到的余数倒过来,就是对应的八进制。

案例:

请将 131 转成八进制 => 0203
image.png

20.十进制转十六进制

规则:

将该数不断除以 16,直到商为 0 为止,然后将每步得到的余数倒过来,就是对应的十六进制。 案例:请将 237

案例:

请将 237 转成十六进制 => 0xED
image.png

课堂练习:

123 转成 二进制 => 0b01111011
678 转成 八进制 => 01246
8912 转成 十六进制 => 0x22D0

三、二进制转八十六进制

21.二进制转八进制

规则:

从低位开始,将二进制数每三位一组,转成对应的八进制数即可。
111=7 000=0

案例: 请将 ob11010101 转成八进制
ob11(3)010(2)101(5) => 0325

22. 二进制转十六进制

规则:

从低位开始,将二进制数每四位一组,转成对应的十六进制数即可。
0000=0 1111=F

案例:

请将 ob11010101 转成十六进制

ob1101(D)0101(5) = 0xD5

课堂练习:

0b11100101 转成 八进制 => 0345
0b1110010110 转成 十六进制 => 0x396

四、八十六进制转二进制

23.八进制转二进制

规则:

将八进制数每 1 位,转成对应的一个 3 位的二进制数即可。
7=111 0=000

案例: 请将 0237 转成二进制
02(010)3(011)7(111) = 0b10011111

24.十六进制转二进制

规则:

将十六进制数每 1 位,转成对应的 4 位的一个二进制数即可。
0=0000 F=1111

案例:

请将 0x23B 转成二进制
0x2(0010)3(0011)B(1011) = 0b001000111011

课堂练习:

01230 转成 二进制 => 0b001010011000
0xAB29 转成二进制 => 0b1010101100101001

25.位运算的思考题

  1. 1) 请看下面的代码段,回答 a,b,c,d,e 结果是多少?
  2. public static void maiin(String []args){
  3. int a=1>>2; //
  4. int b=-1>>2;//算术右移
  5. int c=1<<2;//算术左移
  6. int d=-1<<2;//
  7. int e=3>>>2;//无符号右移
  8. //a,b,c,d,e 结果是多少
  9. System.out.println("a="+a);//0
  10. System.out.println("b="+b);//-1
  11. System.out.println("c="+c);//4
  12. System.out.println("d="+d);//-4
  13. System.out.println("e="+e);//0
  14. }
  15. 2) 请回答在 java 中,下面的表达式运算的结果是: (位操作), 晚上练习
  16. ~2=? //-3 按位取反
  17. 2&3=//2 按位与
  18. 2|3=//3
  19. ~-5=//4
  20. 13&7=//5
  21. 5|4=//5
  22. -3^3=//-2 按位异或

26.二进制在运算中的说明image.png

binary: 逢二进一

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

image.png

总结:

最高位:0=>正数 1=>负数(口诀:0旋转90度还是0,1旋转90度还-)
正数:正数三码合一
负数原码变反码:原码符号位不变,其余1变0,0变1
补码=反码+1
0的反码补码都是0
补码运算,原码结果(正数三码合一,负数补码+1,0的反码补码都是0)

理解总结:

0是正,1是负
正数:三码合一
负数三码:最高位符号位不变,其余0变1,1变0
负数补码=反码+1
补码运算,原码结果

28.位运算符

java 中有 7 个位运算(&、|、^、~、>>、<<和 >>>)
image.png

a.&、|、^、~

按位与&:
image.png
同理按位或|,按位异或^,按位取反~

做好25练习:

b.还有 3 个位运算符 >>、<< 和 >>>

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

总结:

右移补符号位,左移动补0
无符号右移补0
m<>n移动m/2^n

总结:负数的无符号右移,就是相应的补码移位所得,在高位补0即可。
负数的右移,就是补码高位补1,然后按位取反加1即可。

应用案例

BitOperator02.java
1) int a=1>>2; //1 => 00000001 => 00000000 本质 1 / 2 / 2 =0
2) int c=1<<2; //1 => 00000001 => 00000100 本质 1 2 2 = 4

做好25练习

本章作业

image.png

a%b=a-a/b*b

当a是小数,a%b=a-(int)a/b*b
-10.5%3=-1.5

image.png
3d代表double类型的3
image.png

做一个思维导图