循序渐进学Java笔记(Chapter04_运算符)
2024-1-19
| 2024-4-21
0  |  阅读时长 0 分钟
type
status
date
slug
summary
tags
category
icon
password
@ZZHow(ZZHow1024)
参考课程:
韩顺平 循序渐进学Java】
 
  • 运算符介绍
    • 运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等。
  1. 算术运算符
  1. 赋值运算符
  1. 关系运算符 [比较运算符]
  1. 逻辑运算符
  1. 位运算符[需要二进制基础]
  1. 三元运算符

0062_算数运算符介绍

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

0063_算数运算符使用

  1. +,-,*,/,%,++,--,重点:/、%、++
  1. 自增:++
    1. 作为独立的语句使用:前++ 和 后++都完全等价于 i = i + 1;
      作为表达式使用:
      前++:++i先自增,后赋值。
      后++:i++先赋值,后自增。
  1. --、+、-、* 是一个道理,完全可以类推。

0064_算数运算符练习01

  • 面试题1
  • 面试题2

0065_算数运算符练习02

0068_关系运算符介绍

  • 关系运算符(比较运算符)一览
notion image

0069_关系运算符使用

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

0070_逻辑运算符介绍

  • 逻辑运算符一览
  1. 短路与 &&,短路或 ||,取反 !
  1. 逻辑与 &,逻辑或 |, 逻辑异或 ^
notion image

0071_短路与逻辑与

  • 短路与&& 条件1&&条件2 两个条件都为true,结果为true,否则false。
  • 逻辑与& 条件1&条件2 两个条件都为true,结果true,否则false。
  • 区别:
  1. && 短路与: 如果第一个条件为false,则第二个条件不会判断(如果有自增也不会执行),最终结果为false,效率更高。
  1. & 逻辑与: 不管第一个条件是否为false,第二个条件都要判断,效率更低。
  1. 开发中,基本是使用短路与&&,效率更高。
案例演示:And.java

0072_短路或逻辑或

  • 短路或|| 条件1||条件2 两个条件中只要有一个为true,结果为true,否则false。
  • 逻辑或| 条件1|条件2 两个条件中只要有一个为true,结果为true,否则false。
  • 区别:
  1. || 短路或: 如果第一个条件为true,则第二个条件不会判断(如果有自增也不会执行),最终结果为true,效率更高。
  1. | 逻辑或: 不管第一个条件是否为true,第二个条件都要判断,效率更低。
  1. 开发中,基本是使用短路或||,效率更高。
案例演示:Or.java

0073_短路非逻辑异或

  • ! 非(取反) !条件 如果条件本身成立,结果为false,否则为true。
  • a ^ b:逻辑异或,当 a 和 b 不想同时,则结果为true,否则为false。

0075_赋值运算符介绍

  • 介绍
    • 赋值运算符就是将某个运算后的值,赋给指定的变量。
  • 分类
      1. 基本赋值运算符
        1. =
      1. 复合赋值运算符
        1. +=、-+、*=、/=、%= 等
          例:a += b; [等价于:a = a + b;]
          a -= b; [等价于:a = a - b;]

0076_赋值运算符细节

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

0077_三元运算符介绍

  • 基本语法
    • 条件表达式 ? 表达式1 : 表达式2;
  1. 如果条件表达式为true,运算后的结果是表达式1;
  1. 如果条件表达式为false,运算后的结果是表达式2;
补充提示:如果条件表达式是true,表达式2根本不会执行。

0078_三元运算符介绍

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

0079_三元运算符练习

  • 实现求三个数的最大值。

0080_运算符优先级

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

0081_标识符规则

  • 标识符概念
  1. Java 对各种变量、方法和类等命名时使用的字符序列称为标识符。
  1. 2.凡是自己可以起名字的地方都叫标识符 int num1 = 90;
  • 标识符的命名规则(必须遵守)
  1. 由26个英文字母大小写,0-9 , 或 $组成。
  1. 数字不可以开头。int 3ab = 1: // ×
  1. 不可以使用关键字和保留字,但能包含关键字和保留字。
  1. Java中严格区分大小写,长度无限制。
    1. int totalNum = 10; int n = 90;
  1. 标识符不能包含空格。int a b = 90; // ×

0083_标识符规范

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

0084_关键字保留字(不用背)

  • 关键字
  1. 定义:被Java语言赋予了特殊含义,用做专门用途的字符串(单词)。
  1. 特点:关键字中所有字母都为小写。
notion image
notion image
  • 保留字
  1. 定义:现有Java版本尚未使用,但以后版本可能会作为关键字使用。自己命名标识符时要避免使用这些保留字。
  1. 有哪些:byValue、cast、future、generic、inner、operator、outer、rest、var、goto、const

0085_键盘输入

  • 步骤 :
  1. 导入该类的所在包,java.util.* 。
  1. 创建该类对象(声明变量)。
  1. 调用里面的功能。
  • 实现可以从控制台接收用户信息[姓名,年龄,成绩]。
案例演示:Input.java

0086_四种进制介绍

  • 对于整数,有四种表示方式:
  1. 二进制:0,1。满 2 进 1 ,以0b或0B开头。
  1. 十进制:0 - 9 。满 10 进 1 。
  1. 八进制:0 - 7。满 8 进 1 ,以数字0开头表示。
  1. 十六进制:0 - 9 及 A(10) - F(15)。满 16 进 1 ,以0x或0X开头表示。此处的A-F不区分大小写。
案例演示:BinaryTest.java

0087_2进制转10进制

  • 规则:从最低位(右边)开始,将每个位上的数提取出来,乘以2的(位数-1)次方,然后求和。
  • 案例:将 0b1011 转成十进制的数。
  • 过程:
0b1011 = 1 * 2的(1-1)次方 + 1 * 2的(2-1)次方 + 0 * 2的(3-1)次方 + 1 * 2的(4-1)次方 = 1 + 2 + 0 + 8 = 11

0088_8进制转10进制

  • 规则:从最低位(右边)开始,将每个位上的数提取出来,乘以8的(位数-1)次方,然后求和。
  • 案例:将 0234 转成十进制的数。
  • 过程:
0234 = 4 * 8的(1-1)次方 + 3 * 8的(2-1)次方 + 2 * 8的(3-1)次方 = 4 + 24 + 128 = 156

0089_16进制转10进制

  • 规则:从最低位(右边)开始,将每个位上的数提取出来,乘以16的(位数-1)次方,然后求和。
  • 案例:将 0x23A 转成十进制的数。
  • 过程:
0x23A = 10 * 16的(1-1)次方 + 3 * 16的(2-1)次方 + 2 * 16的(3-1)次方 = 10 + 48 + 512 = 570

0090_10进制转2进制

  • 规则:将该数不断除以2,直到商为0为止,然后将每步得到的余数倒过来,就是对应的二进制。
  • 案例:将 34 转成二进制的数。
  • 结果:0B00100010(1字节是8位,前面补0)

0091_10进制转8进制

  • 规则:将该数不断除以8,直到商为0为止,然后将每步得到的余数倒过来,就是对应的八进制。
  • 案例:将 131 转成八进制的数。
  • 结果:0203

0092_10进制转16进制

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

0093_2进制转8进制

  • 规则:从低位开始,将二进制数每三位一组,转成对应的八进制数即可。
  • 案例:将 0b11010101 转成八进制的数。
  • 过程:
0b11010101 = 011(3)010(2)101(5) = 0325

0094_2进制转16进制

  • 规则:从低位开始,将二进制数每四位一组,转成对应的十六进制数即可。
  • 案例:将 0b11010101 转成十六进制的数。
  • 过程:
0b11010101 = 1101(D)0101(5) = 0xD5

0095_8进制转2进制

  • 规则:将八进制数每1位,转成对应的一个3位的二进制数即可。
  • 案例:将 0237 转成二进制的数。
  • 过程:
0237 = 2(010)3(011)7(111) = 0b010011111 = 0b10011111(拿掉多的0)

0096_16进制转2进制

  • 规则:将十六进制数每1位,转成对应的一个4位的二进制数即可。
  • 案例:将 0x23B 转成二进制的数。
  • 过程:
0x23B = 2(0010)3(0011)B(1011) = 0b001000111011

0098_原码 反码 补码(重要

  • 对于有符号数而言
  1. 二进制的最高位是符号位:
    1. 0表示正数,1表示负数(老韩口诀: 0 → 0,1 → -)
  1. 正数的原码,反码,补码都一样(三码合一)。
  1. 负数的反码=它的原码符号位不变,其它位取反(0->1,1->0)。
  1. 负数的补码=它的反码+1,负数的反码 = 负数的补码 - 1。
  1. 0的反码,补码都是0。
  1. java没有无符号数,换言之,Java中的数都是有符号的。
  1. 在计算机运算的时候,都是以补码的方式来运算的。
  1. 当我们看运算结果的时候,要看他的原码

0099-0100_位运算符详解

  • java中有7个位运算
    • &、|、^、~、>>、<<、>>>
  • 运算法则:
    • 按位与 &:两位全为1,结果为1,否则为0。
    • 按位或 |:两位有一个为1,结果为1,否则为0。
    • 按位异或 ^:两位一个为0,一个为1,结果为1,否则为0。
    • 按位取反 ~:0 → 1,1 → 0。
    • 算数右移 >>:低位溢出,符号位不变,并用符号位补溢出的高位。
    • 算数左移 <<:符号位不变,低位补0。
    • 逻辑右移 >>>:也叫无符号右移,低位溢出,高位补 0 。
    • 特别说明:没有 <<< 符号!
  • 计算:
    • 2 & 3 = 2
    • ~(-2) = 1
    • ~2 = -3
    • 1 >> 2 = 0 [本质:1 / 2 / 2 = 0]
    • 1 << 2 = 4 [本质:1 * 2 * 2 = 4]
    • 4 << 3 = 32 [本质:4 * 2 * 2 * 2 = 32]
    • 15 >> 2 = 3 [本质:15 / 2 / 2 = 3]
 
  • 文字
  • 推荐
  • Java
  • 循序渐进学Java笔记(Chapter05_程序控制结构)循序渐进学Java笔记(Chapter03_变量)
    Loading...
    目录