跳转至

第四章 运算符(P063-P103)

1、算数运算符


% 取模,取余

​ 本质:公式:a % b = a - a / b * b

a % b 当 a 是小数时,公式 = a - (int) a / b * b

2、 & 逻辑与 && 短路与


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

3、| 逻辑或 || 短路或


  1. || 短路或:如果第一个条件为true,则第二个条件不会判断,最终为true
  2. | 逻辑或:不管第一个条件是否为 true,第二个条件都要判断,效率低。

4、键盘输入语句


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

步骤:

  1. 导入该类的所在包,java.util.Scanner
  2. 创建该类对象(声名变量)
  3. 调用里面的功能
import java.util.Scanner;
public class Input {
public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);//创建对象接收类
    System.out.println("请输入名字");
    String name = scanner.next();//接受用户输入
    System.out.println("请输入年龄");
    int age = scanner.nextInt();//接受用户输入
    System.out.println("请输入薪水");
    double sal = scanner.nextDouble();//接受用户输入 
}
}

接受字符语句:

char sex = scanner.next().charAt(0);

5、进制转换


  1. 二、八,十六进制转换为十进制

从最低位(右边)开始,将每个位上的数提取出来,乘以 2/8/16 的(位数 - 1)次方

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

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

十转二

image-20230101163748113

十转八

image-20230101163949422

十转十六

image-20230101164222060

  1. 二进制转八进制

从低位开始,将二进制数每三位一组,转成对应的八进制数计科

image-20230101164735395

  1. 二进制转十六进制

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

image-20230101165139948

  1. 八进制转二进制

将八进制数每 1 位,转成对应的一个 3 位的二进制数即可

image-20230101165555341

  1. 十六进制转二进制

将十六进制数每 1 位,转成对应的 4 位的一个二进制数即可

image-20230101165927413

6、位运算


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

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

Java 中有7个位运算( &、|、^、~、>>、<<、>>>)

  1. & 按位与

两位全为 1 ,结果为 1 ,否则为 0

  1. | 按位或

两位有一个为 1 ,结果为 1 ,否则为 0

  1. ^ 按位异或

两位一个为 0 ,一个为 1 ,结果为 1 ,否则为 0

  1. ~ 按位取反

0 -> 1 , 1 -> 0

~2 = ?

2 的原码 00000000 00000000 00000000 00000010

2 的补码 00000000 00000000 00000000 00000010

~ 2的补码 11111111 11111111 11111111 11111101

~ 2的原码 10000000 00000000 00000000 00000010

所以 ~2 = -2

2&3 = ?

2 的原/反/补码 00000000 00000000 00000000 000000010

3 的原/反/补码 00000000 00000000 00000000 000000011

2 & 3 补码 11111111 11111111 11111111 11111110

2 & 3 原码 10000000 00000000 00000000 00000001

所以 2 & 3 = -1

  1. 算数右移 >>

低位溢出,符号位不变,并用符号位补溢出的高位

右移一位等价 -> X / 2

  1. 算数左移 <<

符号位不变,低位补 0

左移一位等价 -> X * 2

  1. 逻辑右移/无符号右移 >>>

低位溢出,高位补 0

没有 <<< 符号