day05:运算符,Scanner

发布时间 2023-08-04 22:12:27作者: 御坂美琴丷

day05:运算符,Scanner

一、运算符

  1. 赋值:=、+=、-=、*=、/=、%=

    • 简单赋值运算符:=

    • 扩展赋值运算符:+=、-=、*=、/=、%=

      • 注意:扩展赋值运算符自带强转功能

        int a = 5;
        a += 10;//相当于a=(int)(a+10)
        System.out.println(a);//15
        a *= 2;//相当于a=(int)(a*2)
        System.out.println(a);//30
        a /= 6;//相当于a=(int)(a/6)
        System.out.println(a);//5
        
        //小面试题
        short s = 5;
        //s = s+10;//编译错误,需要强制转换,改为:s=(short)(s+10)
        s +=10;//相当于s=(short)(s+10)
        
    • 字符串连接:+

      • 若两边为数字,则做加法运算

      • 若两边出现了字符串,则做字符串连接

        int age = 22;
        System.out.println("age=");//age=
        System.out.println(age);//22
        System.out.println("age="+age);//age=22
        System.out.println("我今年"+age+"岁了");//我今年22岁了
        
        String name = "WJH"
        System.out.println("大家好,我叫"+name);//大家好,我叫WJH
        System.out.println("大家好,我叫"+name+",今年"+age+"岁了");//大家好,我叫WJH,今年22岁了
        
      • 任何类型的数据与字符串连接,结果都会变为字符串型

        System.out.println(10+20+""+30); //30 30---------String
        System.out.println(""+10+20+30); //102030-------String
        System.out.println(10+20+30+""); //60-----------String
        
    • 位运算符

      对整型数字做运算,基于二进制来运算的

      & | ^ ~ << >> >>>

      1. &:按位与 1 true 0 false

        0 & 1 =0
        0 & 0 =0
        1 & 0 =0
        1 & 1 =1
        

        2&3
        	2:0010
        	3:0011
        	&:0010 = 2
        
      2. |:按位或

        0 | 1 = 1
        0 | 0 = 0
        1 | 1 = 1
        1 | 0 = 1
        

      1. ^按位亦或

        1 ^ 1 = 0
        0 ^ 0 = 0
        1 ^ 0 = 1
        0 ^ 1 = 1
        

      一个数异或另外一个数两次结果还是该数本身

      交换两个整数变量的值

      方式一:通过第三个变量

      int i =3;
      int j =4;
      int k =i;
      i = j;
      j = k;
      System.out.println(i+","+j)
      

      方式二:^来实现

      int i =3;
      int j =4;
      i = i ^ j;
      j = i ^ j;
      i = i ^ j;
      System.out.println(i+","+j)
      

      方式三:求和的方式(无需创建第三个变量)

      int i = 3;
      int j = 4;
      i = i + j; //i = 11
      j = i - j; //11-6=5
      i = i-j; // 11-5=6
      System.out.println(i+","+j)
      
      1. ~按位取反

        单目运算符

        ~0=1 ~1=0

        正数:原码=反码=补码

        负数:

        ​ 原码:十进制转二进制的方式最高位符号位

        ​ 反码:符号不变,其余各位取反

        ​ 补码:反码的基础+1

        ~i=-i-1

      2. <<

        直接将数字的二进制的形式向左移动相应的位数,左侧移出去的直接舍弃,右侧空出来的补0;符号位保持不变;

        a<<b:a*2^b

      3. >>

        直接将数字的二进制的形式向右移动相应的位数,右侧移出去的直接舍弃,左侧根据符号位来补;

        a>>b:a/(2^b)

      4. >>>

        直接将数字的二进制的形式向右移动相应的位数,右侧移出去的直接舍弃,左侧补0;

        对于正数和右移的结果一致;负数做无符号右移后效果一样

    • 三目运算符:boolean?数1:数2

      • 语法:

        • boolean?数1:数2
      • 执行过程

        • 整个条件运算是有值的,它的值要么是?号后的数1,要么是:后的数2

        • 计算boolean的值:

          • 若为true,则整个表达式的值为?后面的数1

          • 若为false,则整个表达式的值为:后面的数2

            int num = 5;
            int flag = num>0?1:-1;
            System.out.println(flag); //1
            
            int a=8,b=5;
            int max = a>b?a:b;
            System.out.println("max="+max); //max=8
            

            案例:判断数字是奇数还是偶数

            int num = 6;
            String str = num % 2 == ?奇数:偶数
            

二、Scanner

  1. 获取用户从键盘输入的数据

    1. 导包,指定Scanner类所属的包

      java.util.Scanner;

      语句:Import类的包路径

      位置:类的上面,包的下面

    2. 创建Scanner类的对象

      语句:Scanner scan = new Scanner(System.in);

      scan:对象名 变量名 引用名

    3. 调用对象的方法(功能)

      获取整型数字 nextInt()

      获取字符串 next()

      调用方法的格式:对象名.方法名

  2. next()和nextLine()的区别

    1. next()读取输入数据时,遇到空格等空白字符就默认本次数据输入结束
    2. nextLine()读取输入的数据时,遇到回车换行才认为是结束