第四章 运算符

运算符

运算符介绍

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

算术运算符

自增:++

// 如果作为独立语句使用,前++和后++作用一样都等价于i = i + 1;
//作为表达式使用时
i++; //先自增再赋值
++i; //先赋值再自增
int i = 8;
int j = ++i;//等价于i = i + 1; j = i;

int j = i++; // 等价于 j = i; i = i + 1;

经典面试题:

		int i = 1;
		i = i++;
		System.out.println("i=" + i);

		int j = 1;
		j = ++j;
		System.out.println("j=" + j);
// i = 1 , j = 2

关于i的执行步骤:

  1. temp = i ;
  2. i = i + 1;
  3. i = temp;

关于j的执行步骤:

  1. j = j + 1;
  2. Temp = j;
  3. j = temp;

关系运算符

关系运算符的结果都是boolean型的要么为True要么为False

经常会用在if的条件语句或者循环语句中

逻辑运算符

用于连接多个条件,返回值也是boolean型的。

逻辑与 和 短路与的区别:

  • &&短路与,若第一个条件为False则第二个条件不会判断,直接输出结果为False
  • &逻辑与,不管第一个条件是否为False,第二个条件都会进行判断效率低

结论:开发中,我们基本上都使用&&,效率高!


逻辑或 和 短路或的区别:

  • ||短路或,如果第一个条件为True,则不会判断第二个条件,直接输出结果为:True
  • |逻辑或,不管第一个条件是否为True,都要判断第二个条件,效率低

结果:开发中,我们基本上都使用||(短路或),效率高!

赋值运算符

复合运算符会进行类型转换

byte a = 2;
a += 2; 
// 此时输出的a为int型

三元运算符

  • 基本语法

    条件表达式 ?表达式1 : 表达式2;

  • 运算规则

    1. 如果表达式为:True,运算后的结果为:表达式1
    2. 如果表达式为:False,运算后的结果为:表达式2
  • 细节

    表达式1和表达式2要为可以赋值给接收变量的类型(或可以自动转换,强制转换)

键盘输入

引入一个Scanner类,并且创建一个对象。

import java.util.Scanner;
public class input{
  
  public static void main(String[] args){
    
    Scanner myScanner = new Scanner(System.in);
    int age = myScanner.nextInt();
    double wage = myScanner.nextDouble();
    String name = myScanner.next();  
    char gender = myScanner.next().charAt(0);
  }
}

二进制

二进制其他进制

  1. 二进制转十进制
  • 从最低位开始,每一位的数字乘以2的位次数➖1次方,然后求和
  1. 八进制转十进制
  • 从最低位开始,每一位的数字乘以8的位次数➖1次方,然后求和
  1. 十六进制转十进制
  • 从最低位开始,每一位的数字乘以16的位次数➖1次方,然后求和

十进制转其他进制

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

二进制转其他进制

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

其他进制转二进制

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

位运算

// >> 向右位移,<< 向左位移, >>> 逻辑右移,~ 按位取反, & 按位与, |按位或, ^ 按位异或

原码、反码、补码

  1. 二进制的最高位是符号位,0表示正数,1表示负数
  2. 正数的原码反码和补码都一样(三码合一)
  3. 负数的反码 = 它的原码符号位不变,其余位取反
  4. 负数的补码 = 它的反码 + 1, 负数的反码 = 它的补码 - 1
  5. 0 的反码补码都是 0
  6. Java的数都是有符号的
  7. 在计算机运算的时候,都是以补码的形式进行运算的
  8. 当我们看计算结果时,要看它的原码

位移运算

  1. 算数右移(>>):低位溢出,符号位不变,并用符号位补溢出的高位
  2. 算数左移(<<):符号位不变,低位补0
  3. 逻辑友谊(>>>):低位溢出高位补0
  4. 特别说明:没有<<<符号
int a = 1 >> 2;  // a = 0 本质为:1 / 2 / 2
int b = 1 << 2;  // b = 4 本质为:1 * 2 * 2
posted @ 2021-10-22 21:56  WangSir_Code  阅读(71)  评论(0)    收藏  举报