1.算术运算符
+-*/%
在代码中,如果有小数参与运算,结果有可能不精确(后面详细学)(计组:浮点数的加减运算IEEE754)
练习:数值拆分

System.out.println(a % 10);
System.out.println(a / 10 % 10);
System.out.println(a / 100);
①数字相加:数据类型不一样时不能运算,需要转成一样的
隐式转换:取值范围小的变成大的
byte,short,char三种类型运算时,先提升为int,再运算
强制转换:取值范围大的变成小的(不能超过本身类型的范围)
double a = 100.3;
int b = (int)a;
②字符串相加:+用来拼接
连续+,从左到右逐个执行(注:没有字符串就是普通运算符)
③字符相加:char需要在计算中先转为int(ASCII码)
字符+字符,字符+数字 a:97 A:65
注:'a'+"abc"输出的是"aabc",并不是"97abc",只有算数相加才会变成97
2.自增自减运算符
①int a = 10; int b = a++;此时先用后加,a=11,b=10
②int a = 10; int b = ++a;此时先加后用,a=11,b=11
3.赋值运算符和关系运算符
=,+=,-=,*=,/=,%=
注:隐含了强制类型转换 a += b 等同于 a = (int)(a + b)
==,!=,>,>=,<,<=成立为true,不成立为false
4.逻辑运算符
&,|,^,!
^(逻辑异或):相同为false,不同为true 记忆法:相同性别无法在民政局登记
5.短路逻辑运算符
&&(短路与) ||(短路或)
注:相较于&,|,这两个效率更高,例如&&左边为假就不需要判断符号右边的,||左边为真就不需要判断右边的
一个很好的判断方式:
int a = 10;
int b = 10;
boolean result = ++a < 5 && ++b < 5;
System.out.println(result);//false
System.out.println(a);//11
System.out.println(b);//10,b没有进行自增
6.三元运算符
关系表达式?表达式1:表达式2(表达式为真,表达式1为结果;表达式为假,表达式2为结果)
需求:定义一个变量记录两个整数的较大值
int max = a > b ? a : b;
7.运算符优先级
优先考虑小括号
8.原码,反码,补码
(为什么逃离计组了还在学这个东西,,,我真的没招了)
原码:符号位+数值位,十进制数据的二进制表现形式, 计算正数没问题,负数会出问题,所以出现了反码
反码:正数和原码一样,负数的反码在原码的基础上符号位不变,数值位取反

反码可以用于负数计算,但是不能跨0,如果计算结果跨0会出现1的误差值,因为反码0的表现形式有两种,所以出现了补码
补码:1111 1111规定为-1的补码,所以补码=反码+1
1000 0000规定为-128

因此,计算机中数字的存储和运算都是补码
(这就是原理吗?确实要比计组硬记好理解多了)
①byte:1个字节
short:2个字节
int:4个字节
long:8个字节
隐式转换:前面补0
强制转换:前面去0(所以精度有可能会转变,或是符号位会改变)
&:本质上是二进制表示进行逻辑与的结果
int a = 200;
int b = 10;
a & b //值为8
a | b //值为202
<<(左移):二进制补码向左移动,低位补0(左移一次,等于×2)
>>(右移):二进制补码向右移动,高位补0或1,原来是正数补0,负数补1(右移一次,等于÷2)
>>>(无符号右移):高位只补0
int a = 200;
a << 2 //值为800
a >> 2 //值为50
9.if语句
if(关系表达式){
内容;
}
if(flag){ //为true执行内容
内容;
}
if(关系表达式){
内容;
}else{
内容;
}
if(关系表达式){
内容;
}else if(关系表达式){
内容;
}
...
else{
内容;
}
10.switch语句
switch(表达式){
case 值1:
内容1;
break;
case 值2;
内容2;
break;
```
default:
内容;
break;
}
}
注:case后面的值只能是字面量,不能是变量,并且不允许重复
①default的位置和省略:类似于备胎,不一定写在最下面,任意位置都可以
②case穿透:没有写break导致,因此break不可省略
注:匹配到一个case后如果没有break会继续执行下一个case.不用重新再去匹配
③Switch新特性:
省略break,如果只有一行代码,可以省略掉大括号
int number = 1;
switch(number){
case 1 -> {
System.out.println("一");
}
case 2 -> {
System.out.println("二");
}
case 3 -> {
System.out.println("三");
}
default -> {
System.out.println("没有这种选项");
}
}
④if第三种格式:一般用于对范围的判断
Switch:把有限个数据一一列举出来,让我们任选其一
11.for循环
for(初始化;条件判断;条件控制){
循环体;
}

注:变量的作用范围是当前的大括号中;
若把变量定义在循环的里面,那么当前变量只能在本次循环中有效,本次循环结束后,变量就会从内存中消失.当第二次循环开始的时候,又会定义一个新的变量.
12.while循环
初始化语句;
while(条件判断){
循环体;
条件控制;
}

for和while的对比:运行规则相同; 不同:for知道循环次数或者范围使用;while知道循环结束条件使用.
13.do...while循环
初始化语句;
do{
循环体;
条件控制;
}while(条件判断);
先走一次循环体(先执行后判断),所以至少会执行一次
14.无限循环
for(;;){
内容;
}
while(true){
内容;
}
do{
内容;
}while(true);
while最常用
无限循环的下面不能再写其它代码
15.跳转控制语句
在循环的过程中,跳转到别的语句执行
continue:结束本次循环,继续下次循环
break:结束整个循环
952

被折叠的 条评论
为什么被折叠?



