1、运算符介绍
+ **算数运算符** + **赋值运算符** + **关系运算符[比较运算符]** + **逻辑运算符** + **位运算符[需要二进制基础]** + **三元运算符**2、算数运算符
加减乘除
取模==取余
2.1、/ 的应用
10/4 结果是 2
使用浮点数进行运算有小数 10.0 / 4 结果是2.5
2.2、 % 的应用(-10 % 3)
% 取模,取余
在 % 的本质 看一个公式 a % b === a - a / b * b
-10 % 3 = (-10) - (-10) / 3 * 3 = -10 + 9 = -1 结果是 -1
2.3、 ++ 用法
独立使用时 i++ 和 ++i 是相等的
2.3.1、i++ 和 ++i 的理解
作为表达式使用
前++ : ++i 先字赠后赋值
后++ : i++ 先赋值后自增
public class ArithmeticOperator{
public static void main(String[] args){
/*
作为表达式使用
前++ : ++i 先字赠后赋值
后++ : i++ 先赋值后自增
*/
int j = 8;
//int k = ++j;//等价于 j = j + 1;k = j;
int k = j++;//等价于 k = j;j = j + 1;
int k = ++i;
System.out.println(j + k);
}
}
2.3.1.1、经典面试题(思路)
public class ArithmeticOperatorExercise01{
public static void main(String[] args){
//练习
//经典面试题
int i = 1;
i = i++;//过程: (1) temp = i;(2) i = i + 1;(3) i = temp;
System.out.println(i);//1
}
}
//题二
int j = 1;
j = ++j;//过程: (1) i = i +1;(2) temp = i;(3) i = temp;
System.out.println(j);//2
2.3.1.2、课堂训练
1) 假如还有 59 天放假,问:合 xx 个星期零 xx 天//课堂训练
//1.需求:
//假如还有 59 天放假,问:合 xx 个星期零 xx 天
//2.思路分析
//(1) 使用 int 变量 days 保存 天数
//(2) 一个星期是 7 天 星期数 weeks: days / 7 零 xx 天 leftDays days % 7
//(3) 输出
//3.走代码
int days = 59;
int week = days / 7;
int leftDay = days % 7;
System.out.println("星期:" + week + "天数:" + leftDay);//星期8,天3
2)华氏温度 转 摄氏温度
//定义一个变量保存华氏温度,华氏温度转换摄氏温度的公式为
//:5/9*(华氏温度-100),请求出华氏温度对应的摄氏温度
//
//2 思路分析
//(1) 先定义一个 double huaShi 变量保存 华氏温度
//(2) 根据给出的公式,进行计算即可 5/9*(华氏温度-100)
// 考虑数学公式和 java 语言的特性
//(3) 将得到的结果保存到 double sheShi
double huaShi = 1234.6;
double sheShi = ((double)5/9)*(huaShi - 100);
//或者 double sheShi = 5.0/9*(huaShi - 100);
System.out.println("华氏温度:" + huaShi + "对应的" + "摄氏温度:" + sheShi);
3、关系运算符
4、逻辑运算符(*)
&&短路与
^ 异或 不同时为true、相同时为false
4.1、逻辑与和短路与区别(&&和&)
案例:
public class LogicOperator01{
public static void main(String[] args){
//练习
//&& 和 & 案例演示
//&&短路与应用
int age = 50;
if(age > 20 && age < 90){
System.out.println("ok!");
}
//&逻辑与应用
if(age > 20 & age < 90){
System.out.println("ok2!");
}
//区别
int a = 4;
int b = 9;
//对于&&短路与而言,如果第一个条件为 false ,后面的条件不再判断
//对于&逻辑与而言,如果第一个条件为 false ,后面的条件仍然会判断
if(a < 1 && ++b >3){
System.out.println("ok300!");
}
System.out.println("a=" + a + "b=" + b);//a = 4;b = 9
if(a < 1 & ++b >2){
System.out.println("ok400!");
}
System.out.println("a=" + a + "b=" + b);//a = 4;b = 10
}
}
if(a && b) ----如果a是错误的b将不执行,短路与
if(a & b) ----如果a是错误的b依然执行,逻辑与
4.2、同时逻辑或 和 短路或用法(|和| |)
if(a | | b) ----如果a是true的b将不执行结果为true,短路或
if(a & b) ----如果a是错误或者正确的,b依然执行,逻辑或
//看看区别
//(1)||短路或:如果第一个条件为 true,
//则第二个条件不会判断,最终结果为 true,效率高
//(2)| 逻辑或:不管第一个条件是否为 true,第二个条件都要判断,效率低
int a = 4;
int b = 9;
if( a > 1 || ++b > 4) { // 可以换成 | 测试
System.out.println("ok300");
}
System.out.println("a=" + a + " b=" + b); //4 10
4.3、异或
public class InverseOperator {
//编写一个 main 方法
public static void main(String[] args) {
//! 操作是取反 T->F , F -> T
System.out.println(60 > 20); //T
System.out.println(!(60 > 20)); //F
//a^b: 叫逻辑异或,当 a 和 b 不同时,则结果为 true, 否则为 false
boolean b = (10 > 1) ^ ( 3 > 5);//T
System.out.println("b=" + b);//T
}
}
4.4、赋值运算符
public class Assign{
public static void main(String[] args){
//练习
//赋值运算
byte b = 3;
b += 2;//此时考虑类型转换;等价 b = (byte)(b + 2)
b++; //等价b = (byte)(b + 1)
System.out.println(b);
}
}
4.5、三元运算符
a > b ? c : d;
5、运算符优先级
- () , { } 等
- 单目运算符 ++ –
- 算数运算符
- 位移运算符
- 比较运算符
- 逻辑运算符
- 三元运算符
- 赋值运算符
5.1、标识符的命名规则规范
命名区分大小写
自己命名保留字不可用
6、原码、反码、补码(重点背下来)
6.1、基础
7、位运算符
7.1、&、|、^、~ 的用法
与,或,非,异或,取反
计算机内部运行的时候采用补码
显示用户的是原码
&和~ 的运算案例,其它的道理一样
import java.util.Scanner;
public class BitOperator{
//编写一个main方法
public static void main(String[] args){
//1.先得到 2的补码 ==》2的原码 00000000 00000000 00000000 00000010
// 原反补相同 2的反码 00000000 00000000 00000000 00000010
// 2的补码 00000000 00000000 00000000 00000010
//2. 3的补码 3的原码 00000000 00000000 00000000 00000011
// 3的补码 00000000 00000000 00000000 00000011
//3. 按位与
// 00000000 00000000 00000000 00000010
// 00000000 00000000 00000000 00000011
// 00000000 00000000 00000000 00000010 &后的补码,返回给我们的是原码
// 运算后的原码 也是 00000000 00000000 00000000 00000010
// 结果就是 2
System.out.println(2 & 3);//2
//推导
//1.先得到 -2 的原码 10000000 00000000 00000000 00000010
//2.-2的 2的反码 11111111 11111111 11111111 11111101
//3. -2的补码 11111111 11111111 11111111 11111110
//4. ~-2操作 00000000 00000000 00000000 00000001(运算后的补码)
//5. 运算后的原码就是:00000000 00000000 00000000 00000001 1
System.out.println(~-2);//1
//推导
//1. 得到2的原码 :00000000 00000000 00000000 00000010
// 2的 补码 :00000000 00000000 00000000 00000010
//2、~2 操作 :11111111 11111111 11111111 11111101(取反后)
//3. 运算后的反码 :11111111 11111111 11111111 11111100(先反码在原码)
// 原码 :10000000 00000000 00000000 00000011 -3
System.out.println(~2);//-3
}
}
7.2、位移用法
- 2 >> 3 :2向右移3位
- 2 << 3 :2向左移3位
例如: 2. >> 1 2的二进制位: 0010–》0001===> 1
2 >> 1 2的二进制位: 0010—》 0100===> 4
2、键盘输入语句
1、引入包概念
2、Scanner键盘输入事件
import java.util.Scanner;
public class Input{
public static void main(String[] args){
//演示接受用户的输入
// 步骤
//Scanner类 表示简单文本扫描器,在java.util;包
//1、引入/导出 Scanner类所在的包
//2、创建Scanner 对象 , new 创建一个对象 体会
//myScanner 就是Scanner类的对象
Scanner myScanner = new Scanner(System.in);
//3、 接收用户输入了,使用 相关方法
System.out.println("请输入名字");
String name = myScanner.next();
System.out.println("请输入年龄");
int age = myScanner.nextInt();
System.out.println("请输入薪资");
double score = myScanner.nextDouble();
System.out.println("你的信息如下:");
System.out.println("名字:" + name + "\t年龄:"
+ age + "\t薪资:" + score);
}
}
3、进制
//Binary进制
//n1 二进制
int n1 = 0b1010;
//n2 八进制
int n2 = 0103;
//n3 十进制
int n3 = 103;
//n4 十六进制
int n4 = 0x101;
System.out.println("二进制:" + n1 + "八进制:" +
n2 + "十进制:" + n3 + "十六进制:" + n4);
3.1、进制转换
- n进制转十进制简单
- 十进制 转 二进制 整数倒取余,小数正取整 34 --》100010
- 十进制 转 八进制 整数倒取余,小数正取整
- 十进制 转 十六进制 整数倒取余,小数正取整
- 二进制 转 八进制 三位为一组
- 二进制 转 十六进制 四位为一组
- 八进制、十六进制 转 二进制
- 八转二 每一位转成三位
- 十六转二 每一位转成四位
4、本章作业
1、1,2题
2、3题
3、4题
Double.parseDouble(“18.8”);
注意:double中的String不能是字符串
(本章作业图片中已解释,部分图片借用网络资源)