12.2 Java基础4

  • 对昨天所学内容的补充与回顾
  • 算术运算符: 单目: ++ -- 双目: + - * / %
  • 运算符: 关系 ,比较-》boolean

                      int a = 1, b = 2;

        //a = b 这个是赋值,不是比较,输出a
        System.out.println(a = b);// 2 
        System.out.println(a == b);// true 2==2
        System.out.println(a != b);//false
        System.out.println(a >= b);//true
        System.out.println(a <= b);//true
        
        //特殊,通常比较的是基本类型 ; byte short int long char boolean
        System.out.println(1>0 == 1>1 );//false
        
        //浮点型不建议用 == 来比较,因为它们比较时比的是二进制
        System.out.println(0.3 == 0.3f);//false
        System.out.println(0.5 == 0.5f);//true
        
        //引用类型String
        String str1 = "官官";
        String str2 = "官官";
        //String str3 = new String("官官");
        
        // == 对于字符串来说,比较的是字符串存储的地址值,不是内容。
        //因为str1 和str2的 存储的地址是一样的。
        System.out.println(str1 == str2);// true
        //扩展 比较内容.equals
        System.out.println(str1.equals(str2));

今天所学内容:位运算符,三元运算符,

&:按位与  两位同时为1才返回1.

|:按位或,只要有一位为1即可返回1

~:按位非,将操作数的每个位(包括符号位)全部取反。

^:按位异或,相同返回0,不同时返回1

      负数 取反得到反码  +1变成补码,然后再操作

 >>(有符号右移): 8>>2 ======== 8除以2的2次幂===相当于===左操作数除以2的右操作数次幂

 <<(左移):  8<<2======== 8*2的2次幂===相当于===左操作数*2的右操作数次幂

正数时:原码 反码 补码相同

负数时:原码   反码:除了符号位取反(以外0变成1 1变成0)   补码=反码+1

 

样例:

// 按位与,将15和6转换为二进制,同1结果为1.否则为0
        System.out.println(15 & 6); //1111 0110 得0110为6
        //按位或 只要有一位为1即可返回1
        System.out.println(15 | 6); //1111 0110 得1111为15
        //按位异或 ^ 相同返回0,不同时返回1
        System.out.println(15 ^ 6); //1111 0110 得1001 1*2*2*2+1*1=9
        //?
        System.out.println(15 ^ 8); //1111 1000 得0111 1+2+4=7

 

        System.out.println(~ 6);//将操作数的每个位(包括符号位)全部取反。
        //2*8 高效计算方法 二进制  位运算
        System.out.println(2<<3);// 8>>2 ======== 8除以2的2次幂 8<<2======== 8*2的2次幂
        
        //右侧移位
        //00000010 ->
        System.out.println(16>>3);

 

System.out.println(~ 6);
        
        //2*8 高效计算方法 二进制  位运算
        System.out.println(2<<3);//2*(2*2*2)=16
        
        //右侧移位
        //00000010 ->
        System.out.println(16>>3);//16/(2*2*2)=2

 

问:比2*8运算效率更高的运算方式是什么?

结果:2<<3

 

位运算符的应用结合算术运算符的应用:

//从控制台输入两个整数,我们交换两个整数后,输出
        Scanner input = new Scanner(System.in);
        
        //提示用户
        System.out.println("请输入两个整数");
        
        //接收
        int a = input.nextInt();
        int b = input.nextInt();
    
        //

        System.out.println("交换之前: a:"+a+",b:"+b);
        //交换
        //不允许定义一个临时的变量 //a=1 b=2
        a = a ^ b;  // a = 3  ,b =2 //二进制 01 10 a=11
        
        System.out.println(a+","+b);
        
        b = a ^ b; //  b = 1 , a =3//二进制 11 10 b=01

        System.out.println(a+","+b);
        
        a = a ^ b; //  a = 2 , b =1//二进制 11 01 a=10

        System.out.println(a+","+b);
        
        
        //交换后输出
        System.out.println("交换之后 : a:"+a+",b:"+b);

问:获取三个数中的最大数。

        Scanner input = new Scanner(System.in);

        System.out.println("请输入3个整数");
        int a = input.nextInt();
        int b = input.nextInt();
        int c = input.nextInt();

        // 条件1?true结果:false结果;

        // 如果怎么样,就怎么样 否则 就怎么样.

        int max =  a > b ? a : b;
        
        max =  max > c ? max : c;

        System.out.println("max :" + max);

 

问:表达式x&&y||z的运行顺序?

答:System.out.println(a>b && b>c || false);

经验证,a>b先执行,&&的优先级比||高

 

  • 流程控制

只有两种可能时用if...else

三种或三中以上可能时用if...else if...else

 

Debug入门

1.1.1     分支结构debug 举例:

import java.util.Scanner;

/**

 * 题目:岳晓群的童年

 *

 * @author Administrator

 *

 */

public class Test11_IF_ELSE_IF {

   public static void main(String[] args) {

      //

      Scanner input = new Scanner(System.in);

      System.out.println("请输入岳晓群本次期末考试成绩");

      int score = input.nextInt();//100

      // 判断一下,成绩需要合法:

      if (score > 100 || score < 0) {

         System.out.println("成绩输入的范围不合法");

      } else {

         // 100分 奖励 Mete40 pro

         if (score == 100) {

            System.out.println("奖励 Mete40 pro");

         }

         // (80,99]时,奖励一台iPad

         else if (score > 80 && score <= 99) {

            System.out.println("奖励一台iPad");

         }

         // [60,80] 奖励一个 switch

         else if (score > 60 && score <= 80) {

            System.out.println("奖励一台switch");

         }

         // 其它时, 混合双打

         else {

            System.out.println("奖励混合双打一场");

         }

      }

   }

}

 

Debug步骤:

  1. 先设置断点:

  1. 运行程序: debug as

  1. 执行到断点这行,我们去查看变量,查看表达式的值,从而来判断逻辑是否正确:

  1. 过程中,通过step over单步执行(F6),执行到每个节点都重复步骤发现问题,修改问题.

感想:还好,尚可,做好预习。

18:25:16 2021-12-02

posted on 2021-12-02 18:24  heyiyang1312  阅读(5)  评论(0)    收藏  举报

导航