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步骤:
- 先设置断点:

- 运行程序: debug as

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


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

感想:还好,尚可,做好预习。
18:25:16 2021-12-02
posted on 2021-12-02 18:24 heyiyang1312 阅读(5) 评论(0) 收藏 举报
浙公网安备 33010602011771号