(三)赋值运算符
‘+=’ 加后赋值,‘-=’减后赋值,‘*=’乘后赋值,‘/=’除后赋值,‘%=’取余后赋值
底层隐藏了一个强制类型转换。 例:short s=1;s+=1;等价于 s = (short)(s+1)
(四)关系运算符
‘==’判断两边相等,相等返回true,不相等为false。
‘!=’判断是否不相等,不相等返回true,相等返回false。
‘>’,‘>=’,‘<’,‘<=’同理。
关系运算符返回的都是Boolean类型。
(五)逻辑运算符
‘&’ 逻辑与(且) 两边都为真结果才为真。
‘|’ 逻辑或 两边都为假结果才为假
‘^’ 逻辑异或 相同为false,不相同为true
‘ !’ 逻辑非 取反
(六)三元运算符/三元表达式
格式: 关系表达式?表达式1:表达式2;
例: 求两个数的较大值 int max= a>b?a:b;
条件判定: int temp=temp==0?x-y:temp;
(当temp==0条件满足时,取值为x-y,条件不满足时,取值为temp本身)
(七)运算符优先级
‘()’优先于所有,想要谁先计算使用‘()’。
六、原码、反码和补码
原码:十进制数据的二进制表现形式,最左边的是符号位 0为正,1为负。
反码:正数的补码反码时其本身,负数的反码时符号位保持不变,其余位取反。
补码:整数的补码时其本身,负数的补码是在其反码的基础上+1。
二进制负数的加减运算首先需要将负数转为反码再进行运算,结果转为原码就是正确结果。
但如果负数的加减运算跨零了,如 -6+7,则会出现问题。根本原因是0的反码有两种情况:-0与+0
因此当负数跨零运算时有1的误差。而补码的存在就是为了消除误差。
计算机中的存储计算都是以补码的形式进行的。
在二进制运算中‘&’、‘|’可参与运算,规则同为:0为false,1为true。(0,1均为对应二进制位进行的逻辑运算结果)
除此以外还有左移运算符‘<<’,规则为:二进制码向左移动,低位补0。
右移运算符‘>>’,规则:二进制码向右移动,高位补0或1(与原数符号位一致)。
无符号右移运算符‘>>>’,规则:向右移动,高位补0。
七、流程控制语句
(一)IF语句
第一种格式: if(关系表达式){ 语句;} //若语句只有一句,大括号 ‘{ }’ 可以不写。若对一个Boolean类型变量进行判断,不要用‘==’判断,直接将变量作为关系表达式。
第二种格式: if(关系表达式){ 语句体1;} else{ 语句体2; }
第三种格式: if(关系表达式1){ 语句体1;}else if(关系表达式2){ 语句体2;}.....else{ 语句体n+1;}
(二)SWITCH语句
格式:
switch(表达式){
case值1:语句体1;break;
case值2:语句体2;break;
...
case值n:语句体n;break;
default: //若所有的case值都未匹配,则进行default语句
语句体n+1;break;
} // defaul可以省略,不建议。位置随意,建议放在最后。
// break表示跳出switch语句
case穿透:当case有多个值都进行同类型的语句体时,可以利用case穿透编写代码。
例: case 1:
case 2:语句体2;break; //此时case1 和 case2 进行同种操作
(三)循环语句
①For循环
格式 for(int i=1;i<=10;i++){ 语句体;}
//变量若定义在循环体内,则在本次循环结束时变量会消失,第二次循环开始时,会重新定义新的变量。
②While循环
格式:while(条件判断语句){ 循环体语句;条件控制语句;} //判断语句为true则循环继续,为false则循环结束。
区别:
for循环中控制循环的变量在循环结束后,不能被再次访问。//for(int i=1;i<100;i++)
while循环中控制循环的变量,对于while循环来说不影响再次访问 //int i=1; while(i>0){ }
for循环知道循环的次数和循环的范围,而while循环不知道循环的次数和范围,只知道循环的结束条件。
③do...while循环
格式:do{ 循环体语句;条件控制语句;}while(条件判断语句); //先执行后判断
④无限循环
for(;;){ 循环体语句;}
while(true){ 循环体语句;} //最常用
do{ 循环体语句;}while(true);
无限循环下面不能再有代码,因为永远执行不到。
(四)跳转控制语句
循环中使用continue;表示跳过本次循环
循环中使用break;表示跳出整个循环