复习
- 进制
- 二、八、十、十六进制的计算规则
- 进制之间的转换,尤其是和二进制的转换
- 计算机中的基本存储单位:b -> B -> KB -> MB -> GB -> TB -> PB
- 变量:定义格式,先定义后使用,先赋值后使用
- 数据类型
- 分类:基本类型和引用类型
- 基本类型:byte,short,int,long,float,double,char,boolean
- 整数默认是int,小数默认是double
- long类型的数据结尾是l/L,float类型的数据结尾是f/F
- char依靠Unicode编码体系中的码表来转化为数字,所以char类型可以直接存储数字
char c1 = 'a';
char c2 = '中';
char c3 = 97;
char c4 = 'u009a';
- 原反补三码
- 计算机中存储的是数据的补码形式
- 正数的原反补三码一样,负数的反码是在原码的基础上最高位不变,其余位0<->1,负数的补码是在反码的基础上+1
- 由于数据是以补码形式来存储和计算,二进制中1越大,数越大
运算符
一、算术
- 符号:+ - * / % ++ --
- 整数计算结果一定为整数,不会发生类型的提升/转换。所以如果需要在计算过程中来保留小数位,就必须有小数参与运算
- byte、short和char类型在计算的时候会自动提升为int类型
- 小类型和大类型运算,结果一定是大类型
- 除以0的问题
- 整数/0 -> ArithmeticException - 算术异常
- 非零小数/0 -> ±Infinity
- 0.0/0,0/0.0,0.0/0.0 -> NaN
- 非零小数/0.0 -> ±Infinity
- %:取模运算(取余运算)
int i = 10;
int j = 3;
int k = i % j;
Java中的取余运算和数学中取余运算略微不同:Java中允许对负数和小数取余
7.++:自增,在本身的基础上+1。
--:自减,在本身的基础上-1
int i = 5;
i++; // 等同于i = i +1;
注意问题:
1)在Java中,允许byte,short和char类型,自增完成之后,结果类型不发生改变
2)++/--允许放在变量之前,也允许放在变量之后,即i++或者++i
int x = 5;
int y = x++; --> 由于x在前,所以会先将x的值5取出来,然后x会进行自增,自增为6,再将取出来的5赋值给y -> 先取值后自增
int x = 5;
int y = ++x; --> 由于++在前,所以先将x自增为6,然后将结果赋值给y --> 先自增后取值
二、赋值
- 符号:=,+=,-=,*=,/=,%=,&=,|=,^=,<<=,>>=,>>>=
- +=表示在当前变量的基础上加上指定的单位。例如
int i = 5;
i += 3; // i = i + 3;
- byte、short和char可以做赋值运算,在做赋值运算的时候不会发生类型的提升。例如
byte b = 3;
b += 2; // 在底层依然以int运算,但是在最后赋值的时候强制转化为byte
- 赋值运算永远发生在最后
三、比较
- 符号:>,<,>=, <=,==,!=
例如判断a是否等于3:a == 3
- 比较运算的结果一定是布尔值:true/false
四、逻辑
- 逻辑运算针对布尔值来进行运算
- 符号:&(And,与),|(Or,或),!(Not,非),^(Xor,异或),&&(短路与),||(短路或)
- 规则
| 符号 | 规则1 | 规则2 | 规则3 |
| & | true & true = true | true & false = false | false & false = false |
| | | true | true = true | true | false = true | false | false = false |
| ! | !true=false | !false=true | |
| ^ | true ^ true = false | true ^ false = true | false ^ false = false |
- 逻辑运算在需要对多个条件来进行综合
获取一个大于6的偶数
n -> n是否大于6
-> n是否是一个偶数
(n > 6) & (n % 2 == 0)
如果学生考试成绩<60或者缺勤次数达到5次,则记为不及格
s -> 考试成绩 t - > 缺勤次数
(s<60) | (t>=5)
- 短路与
获取一个大于6的偶数
n -> n是否大于6
-> n是否是一个偶数
boolean r1 = (n > 6) & (n % 2 == 0)
假设n = 4,n>6条件不成立 -> 确定结果一定不成立
boolean r2 = (n > 6) && (n % 2 == 0)
&&:如果前边条件不成立,则后边不执行
- 短路或
如果学生考试成绩<60或者缺勤次数达到5次,则记为不及格
s -> 考试成绩
t - > 缺勤次数
boolean r3 = (s<60) | (t>=5)
如果一个学生考试成绩为59分,那么此时可以确定这个学生已经不及格
boolean r4 = (s<60) || (t>=5)
||:如果前边条件成立,则后边不执行
五、位
- 位运算针对整数的补码来进行运算
- 符号:&,|,^, <<,>>,>>>,~
- &:与
- |:或
- ^:异或
- 交换值的方式
- 异或法:可以通过异或运算来交换两个整数变量的值
- 加减法:可以通过加减运算来交换俩个数字变量的值
- 追尾法:通过定义第三方变量的方式俩交换两个变量的值
- <<:左移
规律总结:在一定范围内,左移几位就是乘以2的几次方。例如6<<2=6*22=6*4=24
需要计算12*24的最有效率的方式是12<<4
- >>:右移
规律总结:在一定范围内,右移几位就是除以2的几次方。例如35>>3=35/23=35/8=4
- >>>:无符号右移。与右移不同的地方在于,数据右移之后,无论正负,空出来的高位次统一补0。正数的右移和无符号右移相同,负数移动完成之后会变成正数
- ~:取反
规律总结:~i=-i-1。例如~6=-6-1=-7
六、三元
- 三元又称之三目或者条件。格式:条件表达式 ? 表达式1:表达式2。如果条件表达式成立(结果为true)则执行表达式1,反之则执行表达式2。要求表达式1和表达2的结果类型要一致。例如如果需要获取两个数字中的比较大的数
int max = a > b ? a : b;
- 案例:输入一个年龄,输出是否是一个成年人
- 练习:如果一户人家每个月的用电量在100度以下,那么每度电收费0.5元;如果超过100度,但是不超过400度,那么超过100度的部分每度电收费0.8元;如果超过400度,那么超过的部分每度电收费1.2元。输入一个用电度数,输出应缴纳的电费



