叶清誠

导航

第四章 运算符

第四章 运算符
4.1 运算符介绍
4.1.1 运算符介绍
运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等。

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

4.2 算术运算符
4.2.1 介绍
算术运算符是对数值类型的变量进行运算的,在 Java 程序中使用的非常多。
4.2.2 算术运算符一览

4.2.3 案例演示

/**

  • @program: Chapter04

  • @description: 算术运算符的使用

  • @author: 叶清誠

  • @create: 2021-04-01 08:18
    **/
    public class ArithemeticOperator {
    public static void main(String[] args) {
    //使用
    //数学中是2.5,java中是2
    System.out.println(10 / 4);
    //结果是2.5
    System.out.println(10.0 / 4);
    double number = 10 / 4;
    //结果是2.0
    System.out.println(number);

     //% 取模,取余
     //%的本质 a % b = a - a / b * b;
     //-10 % 3 ->  -10-(-10/3)*3 = -1
     //-10 % -3 -> -10-(-10/-3)*(-3) = -1
     //结果是1
     System.out.println(10 % 3);
     //结果是-1
     System.out.println(-10 % 3);
     //结果是-1
     System.out.println(-10 % -3);
     //结果是1
     System.out.println(10 % -3);
    
     //++的使用
     int i =10;
     i++;//自增,相当于i = i + 1;
     ++i;//自增,相当于i = i + 1;
     //i = 12
     System.out.println(i);
    
     /*
     作为表达式使用
     前++:++i先自增后赋值
     后++: i++先赋值后自增
      */
    
     int j = 8;
     //等价于 j =j+1;k=j
     int k = ++j;
     //等价于 k=j;j =j+1;
     int n = j++;
     System.out.println(k);
     System.out.println(n);
    

    }
    }

4.2.4 细节说明

4.2.5

4.2.6 自增自减练习
/**

  • @program: Chapter04

  • @description: 算术运算符练习

  • @author: 叶清誠

  • @create: 2021-04-01 08:45
    **/
    public class ArithemeticOperatorExercise02 {
    public static void main(String[] args) {
    int days = 59;
    int weeks = 59 / 7;
    int leftDays = 59 % 7;
    System.out.println(days + "天" + "合" + weeks + "个星期" + "零" + leftDays + "天");

     double huaShi = 1234.5;
     double sheShi = 5.0 / 9 * (huaShi - 100);
     System.out.println("华氏温度" + huaShi + "对应的摄氏温度是" + sheShi);
    

    }
    }

4.3 关系运算符(比较运算符)
4.3.1

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

4.3.3 案例演示
/**

  • @program: Chapter04
  • @description: 关系运算符的使用
  • @author: 叶清誠
  • @create: 2021-04-01 08:57
    **/
    public class RelationalOperator {
    public static void main(String[] args) {
    int a = 9;//正式开发中不可以a,b
    int b = 8;
    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);//F
    System.out.println(a != b);//T
    }
    }

4.3.4 细节说明

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

4.4 逻辑运算符
4.4.1 介绍

  1. 关系运算符的结果都是 boolean 型,也就是要么是 true,要么是 false。
  2. 关系运算符组成的表达式,我们称为关系表达式。 a > b
  3. 比较运算符"=="不能误写成"="
    4.4.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
    4.4.3 案例演示
    package com.yeqingcheng.java;

/**

  • @program: Chapter04

  • @description: 逻辑运算符的使用

  • @author: 叶清誠

  • @create: 2021-04-01 09:01
    **/
    public class LogicOperator01 {
    public static void main(String[] args) {
    int age = 50;
    if (age > 20 && age < 30) {
    System.out.println("ok");
    }

     //&逻辑与使用
     if (age > 20 & age < 60) {
         System.out.println("111");
     }
    
     //区别
     int a = 4;
     int b = 9;
     //对于&&短路与,第一个条件为flase,第二个条件不会判断
     if (a < 3 && ++b < 50) {
         System.out.println("ok300");
     }
     System.out.println("a= " + a + ",b=" + b);
     //对于&逻辑与,第一个条件为flase,第二个条件会判断
     if (a < 1 & ++b < 50) {
         System.out.println("ok300");
     }
     System.out.println("a= " + a + ",b=" + b);
    

    }
    }

4.4.4 &&与&区别

  1. &&短路与:如果第一个条件为 false,则第二个条件不会判断,最终结果为 false,效率高
  2. & 逻辑与:不管第一个条件是否为 false,第二个条件都要判断,效率低
    3)开发中,我们一般都使用短路与,效率高
    4.4.5 ||和|基本规则
    名称 语法 特点
    短路或|| 条件 1||条件 2 两个条件中只要有一个成立,结果为 true,否则为 false
    |逻辑或 条件 1|条件 2 只要有一个条件成立,结果为 true,否则为 false
    4.4.6 案例基本演示
    package com.yeqingcheng.java;

/**

  • @program: Chapter04

  • @description: 逻辑运算符的使用2

  • @author: 叶清誠

  • @create: 2021-04-01 09:09
    **/
    public class LogicOperator {
    public static void main(String[] args) {
    //短路或||和逻辑或|的使用
    int age = 50;
    if (age > 20 || age < 30) {
    System.out.println("ok100");
    }

     if (age > 20 | age < 30) {
         System.out.println("ok200");
     }
    
     //看看区别
    //(1)||短路或:如果第一个条件为 true,
    //则第二个条件不会判断,最终结果为 true,效率高
     //(2)| 逻辑或:不管第一个条件是否为 true,第二个条件都要判断,效率低
    
     int a= 4;
     int b=9;
     if(a>1 || ++b>4){
         System.out.println("ok");
     }
     //a=4 b=9
     System.out.println("a="+a+",b="+b);
    

    }
    }

4.4.7 ||与|区别

  1. ||短路或:如果第一个条件为 true,则第二个条件不会判断,最终结果为 true,效率高
  2. | 逻辑或:不管第一个条件是否为 true,第二个条件都要判断,效率低
  3. 开发中,我们基本使用 ||
    4.4.8 !取反基本规则
    如果条件本身成立,结果为false,否则为true
    a^b叫逻辑异或,当a和b不同时结果为true,否则为false
    4.4.9 案例演示
    package com.yeqingcheng.java;

/**

  • @program: Chapter04

  • @description: !和^案例演示

  • @author: 叶清誠

  • @create: 2021-04-01 09:17
    **/
    public class InverseOperator {
    public static void main(String[] args) {
    //!操作是取反 T->F F->T
    //true
    System.out.println(60 > 20);
    //false
    System.out.println(!(60 > 20));

     //a^b 逻辑异或 当a和b不同时,结果为true
     boolean b = (10 > 1) ^ (2 > 3);
     System.out.println(b);
    

    }
    }

4.4.10 练习题

4.4.11 练习题2

4.5 赋值运算符
4.5.1 赋值运算符就是将某个运算后的值,赋给变量
4.5.2 分类
基本赋值运算符 = int a = 10;
复合赋值运算符
+= ,-= ,*= , /= ,%= 等 , 重点讲解一个 += ,其它的使用是一个道理
a += b; [等价 a = a + b; ]
a -= b; [等价 a = a - b; ]
4.5.3 特点

  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++;
    package com.yeqingcheng.java;

/**

  • @program: Chapter04

  • @description: 赋值运算符的使用

  • @author: 叶清誠

  • @create: 2021-04-01 09:25
    **/
    public class AssignOperator {
    public static void main(String[] args) {
    int n1 = 10;
    //n1=n1+4;
    n1 += 4;
    System.out.println(n1);

     //复合赋值运算符会进行类型转换
     byte b = 3;
     //等价与 b = (byte)(b+2);
     b += 2;
     System.out.println(b);
    

    }
    }

4.6三元运算符
4.6.1 基本语法
条件表达式 ? 表达式 1: 表达式 2;
运算规则:

  1. 如果条件表达式为 true,运算后的结果是表达式 1;
  2. 如果条件表达式为 false,运算后的结果是表达式 2;
    口诀:一真大师
    4.6.2 案例演示
    package com.yeqingcheng.java;

/**

  • @program: Chapter04
  • @description: 三元运算符的使用
  • @author: 叶清誠
  • @create: 2021-04-01 09:31
    **/
    public class TernaryOpetator {
    public static void main(String[] args) {
    int a = 10;
    int b = 99;
    //a>b为false,返回b--
    int result = a > b ? a++ : b--;
    //result = 99
    System.out.println(result);
    }
    }

4.6.3 使用细节

  1. 表达式 1 和表达式 2 要为可以赋给接收变量的类型(或可以自动转换)
  2. 三元运算符可以转成 if--else 语句
    int res = a > b ? a++ : b--;
    if(a>b) res = a++;
    else res = b--;

package com.yeqingcheng.java;

/**

  • @program: Chapter04
  • @description: 三元运算符的使用细节
  • @author: 叶清誠
  • @create: 2021-04-01 09:33
    **/
    public class TenaryOperator {
    public static void main(String[] args) {
    //表达式1和表达式2要为可以赋给接收变量的类型(或可以自动转换/强制转换)
    int a =3;
    int b=8;
    int c=a>b?a:b;
    //c=8
    System.out.println(c);
    double d = a > b ? a : b+3;
    //11.0
    System.out.println(d);
    }
    }

4.6.4 使用细节
package com.yeqingcheng.java;

/**

  • @program: Chapter04

  • @description: 实现三个数的最大值

  • @author: 叶清誠

  • @create: 2021-04-01 09:43
    **/
    public class TenaryOperatorExercise {
    public static void main(String[] args) {
    int n1 = 123;
    int n2 = 1234;
    int n3 = 4567;
    //思路
    //1.先得到n1,n2的最大值,保存到max1中
    //2.然后再求出max1和n3的最大值,保存到max2中
    int max1 = n1 > n2 ? n1 : n2;
    int max2 = max1 > n3 ? max1 : n3;
    System.out.println(max2);

     //一部到位的写法
     int max = ((n1 > n2) ? n1 : n2) > n3 ? ((n1 > n2) ? n1 : n2) : n3;
     System.out.println(max);
    

    }
    }

4.7 运算符优先级

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

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

4.8.1 判断下列变量名是否正确
hsp
//ok
hsp12 //ok
1hsp
//错误, 数字不能开头
h-s // 错误
, 不能有 -
x h // 错误, 有空格
h$4 // ok
class //错误,class 关键字
int // 错误 ,int 是关键字
double //错误 ,double 是关键字
public //错误 ,public 是关键字
static //错误 ,static 是关键字
goto //错误, goto 是保留字
stu_name //ok

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

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

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

4.10 保留字
Java 保留字:现有 Java 版本尚未使用,但以后版本可能会作为关键字使用。自己命名标识符时要避免使用这些保留
字 byValue、cast、future、 generic、 inner、 operator、 outer、 rest、 var 、 goto 、const
4.11 键盘输入语句
4.11.1
在编程中,需要接收用户输入的数据,就可以使用键盘输入语句来获取。Input.java , 需要一个 扫描器(对象), 就是
Scanner
4.11.2 步骤

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

import java.util.Scanner;

/**

  • @program: Chapter04
  • @description: 键盘输入
  • @author: 叶清誠
  • @create: 2021-04-01 19:56
    **/
    public class Input {
    public static void main(String[] args) {
    //演示接受用户的输入
    //步骤
    //Scanner 类 表示 简单文本扫描器,在 java.util 包
    //1. 引入/导入 Scanner 类所在的包
    //2. 创建 Scanner 对象 , new 创建一个对象,体会
    // myScanner 就是 Scanner 类的对象
    Scanner scanner = new Scanner(System.in);
    System.out.println("请输入名字");
    //当程序执行到 next 方法时,会等待用户输入~~~
    String name = scanner.next();
    System.out.println("请输入年龄");
    int age = scanner.nextInt();
    System.out.println("请输入薪水");
    double salary = scanner.nextDouble();
    System.out.println("人的信息如下");
    System.out.print("名字:" + name + ",年龄:" + age + ",薪水:" + salary);
    }
    }

4.12进制
4.12.1 进制基本介绍
对于整数,有四种表示方式:
二进制: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 不区分大小写。
4.12.2 基本演示
package com.yeqingcheng.java;

/**

  • @program: Chapter04
  • @description: 演示四种进制
  • @author: 叶清誠
  • @create: 2021-04-01 09:58
    **/
    public class BinaryTest {
    public static void main(String[] args) {
    // n1 二进制
    int n1 = 0b1010;
    //n2 十进制
    int n2=1010;
    //n3 八进制
    int n3 = 01010;
    //n4 16进制
    int n4 = 0x10101;
    System.out.println(n1);
    System.out.println(n2);
    System.out.println(n3);
    System.out.println(n4);
    }
    }

4.13 进制图示

4.14 进制转换
4.14.1 进制转换基本结束
第一组:

  1. 二进制转十进制
  2. 八进制转十进制
  3. 十六进制转十进制
    l 第二组:
  4. 十进制转二进制
  5. 十进制转八进制
  6. 十进制转十六进制
    l 第三组
  7. 二进制转八进制
  8. 二进制转十六进制
    l 第四组
  9. 八进制转二进制
  10. 十六进制转二进制
    4.15 二进制转换成十进制
    0b1011=12的零次方+12的1次方+0+1*2的三次方=1+2+8=11

4.16 八进制转换成十进制

0234=480+3*81+28^2=4+24+128=156
4.17 十六进制转化为十进制
规则:从最低位(右边)开始,将每个位上的数提取出来,乘以 16 的(位数-1)次方,然后求和。
案例:请将 0x23A 转成十进制的数
0x23A = 10 * 16^0 + 3 * 16 ^ 1 + 2 * 16^2 = 10 + 48 + 512 = 570
课堂练习:
0b110001100=396
02456=1326
0xA45=2629
4.18 十进制转化为2进制
规则:将该数不断除以 2,直到商为 0 为止,然后将每步得到的余数倒过来,就是对应的二进制。
案例:请将 34 转成二进制
= 0B00100010
4.19 十进制转化为8进制
规则:将该数不断除以 8,直到商为 0 为止,然后将每步得到的余数倒过来,就是对应的八进制
131=0203
4.20 十进制转化为十六进制
规则:将该数不断除以 8,直到商为 0 为止,然后将每步得到的余数倒过来,就是对应的八进制
237=0Xed
课堂练习
123=0B1111011
678=01246
8912=0x22d0
4.21 二进制转化为8进制
规则:从低位开始,将二进制数每三位一组,转成对应的八进制数即可。
案例:请将 ob11010101 转成八进制
ob11010101=0325
4.22二进制转化为十六进制
规则:从低位开始,将二进制数每四位一组,转成对应的十六进制数即可。
案例:请将 ob11010101 转成十六进制
ob11010101=0xd5
4.23 八进制转化为二进制
规则:将八进制数每 1 位,转成对应的一个 3 位的二进制数即可。
案例:请将 0237 转成二进制
0237=0b10011111
4.24 十六进制转化为二进制
规则:将十六进制数每 1 位,转成对应的 4 位的一个二进制数即可。
案例:请将 0x23B 转成二进制
0x23B=0b1000111011
课堂练习:
01230=0b1010011
0xAB29=0b1010101100101001
4.25 位运算符
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) 请回答在 java 中,下面的表达式运算的结果是: (位操作), 晚上练习
~2=? //
按位取反
2&3=?// 2 按位与 3
2|3=?
~-5=?
13&7=?
5|4=?
-33=?// 按位异或
4.26 二进制在运算中的说明

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

4.28 位运算符
4.28.1 java 中有 7 个位运算(&、|、^、~、>>、<<和 >>>

//先得到2的原码 2的原码是00000000 00000000 00000000 00000010
//正数原码,反码补码相同,2的补码是00000000 00000000 00000000 00000010
//同理3的补码是00000000 00000000 00000000 00000011
00000000 00000000 00000000 00000010
00000000 00000000 00000000 00000011

00000000 00000000 00000000 00000010 运算后的原码
//可以推出2&3=2
2&3=2
// -2 的原码是10000000 00000000 00000000 00000010
//-2的反码是 11111111 11111111 11111111 11111101
//-2的补码是11111111 11111111 11111111 11111110
// ~-2操作 00000000 00000000 00000000 00000001
//运算后的原码是 00000000 00000000 00000000 00000001
//结果是1
System.out.println(~-2);//?

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

  4. 特别说明:没有 <<< 符号
    //00000000 00000000 00000000 00000001
    //00000000 00000000 00000000 00000000
    int a=1>>2;//相当于1/2/2=0

//00000000 00000000 00000000 00000001
//00000000 00000000 00000000 00000100
int c=1<<2;相当于122
System.out.println(4<<3)//422*2=32
System.out.println(15>>2)//15/2/2=3

4.29 作业

posted on 2021-04-16 17:43  叶清誠  阅读(217)  评论(0)    收藏  举报