Day02:
1.运算符号:
加减乘除取余:
int a=12;
int b=13;
//两数之和:
int sum=a+b;
System.out.println("两数之和是:"+sum);
//两数之差
int result=a-b;
System.out.println("两数之差是:"+result);
//;两数之积
result=a*b;
System.out.println("两数之积是:"+result);
//两数之商
result=a/b;
System.out.println("两数之商:"+result);
//两数取余
result=a%b; //a%b的结果的正度是由a的正负确定的
System.out.println("两数的余数是:"+result);
//= 赋值运算 优先级最低
result=20%3;
System.out.println("-20取余3:"+result);
result=-20%3;
System.out.println("20取余3:"+result);
赋值运算:
//赋值运算:
//= += -= /+= %=
a=12;
//在a基础上+2
a+=2;
a=a+2;
byte d=12;
d+=2;//这是一步运算
//报错
// d=d+2;//这是两步,先算a+2,然后把结果赋值给d;
一元运算:
//()优先级最高
//一元运算
//++ --
a=12;
//对a的值加1
a++; ++a;
//对a的值减1
a--; --a;
a=a++;
a=++a;
//a++
//对a的值加1
//对表达式的取值
//后++,先(a的值)赋值(赋给表达式)后加1
a=12;
b=a++;
//a=13; b=12;
比较运算符:
结果是boolean的值
< = > >= <= !=
int a=12;
int b=23;
boolean r =a>b; //false
r=a<b;//true;
r=a<=b;//false
r=a>= b;//false
r=a==b;//基本数据类型中,比较的值是否相等 3=3.0
double c=12.0;
r=a==c;
System.out.println(r);//true
逻辑运算符:
结果也是boolean值
-
&&: (并且) A&&B 只有当A和B都为true,表达式的结果才为True,有一个false,整个表达式的结果即为false
-
int price=3500; boolean isBuy=price >=2500 && price<=4000; if(isBuy) { System.out.println("购买"); }else { System.out.println("需要申请资金"); }
-
||: (或者) 当A和B只有有一个为true,则整个表达式结果为true,只有A和B都为false,整个表达式的结果才为false
-
if(isBuy || price<=0) { System.out.println("成交!"); }else { System.out.println("不要了"); }
-
!:(翻转结果) 原来为true,翻转之后为false:
短路现象:
A&&B 如果A为false,整个表达式的结果就可以判断为false,B不需要做运算了,B就短路了.
int a=2;
boolean r=a++>0&&a++<0;
System.out.println(r);//true
System.out.println(a);//14
boolean m=a++<0&&a++<0;//短路
System.out.println(m);//false
System.out.println(a);//13
A||B 如果A为true,整个表达式的结果就可以判断为true,B不需要做运算了,B就短路了.
a=12;
r=a++==12||++a==12; //短路
System.out.println(r);//true
System.out.println(a);//13
位运算符:
凡是位运算符,都是把值先转换成二进制,再进行后续的处理
(因为位运算是针对二进制数进行的一种运算,对于十进制这些数值的位运算来说,会先将其转为二进制,再对其进行位运算,之后将运算结果再转为十进制。)****
二进制运算是最快的运算方式: 8除以2最快的方法方式 8>>1
-
移位运算符:>>(向左移位) >>> <<(向右移位)
-
按位运算符:& (与) | (或) ^(异或) ~(取反)
-
**(>>)😗*右移 (除以2)<<:二进制数据整体右移(各二进位全部右移若干位,对无符号数,高位补0;有符号数,各编译器处理方法不一样,有的补符号位(算数右移),有的补0(逻辑右移))
-
int c=20; //00000000 00000000 00000000 00010100 int d=c>>1; //00000000 00000000 00000000 00001010 /=10 int e=c>>2; //00000000 00000000 00000000 00000101 /=5 int f=c>>5; //00000000 00000000 00000000 00000000 /=0(移完了) int g=c>>32;//00000000 00000000 00000000 00010100 /=20(32的倍数又移回来了) System.out.println("c=20右移一位:"+d); System.out.println("c=20右移两位:"+e); System.out.println("c=20右移五位:"+f); System.out.println("c=20右移32位:"+g);
-
**(<<)😗*左移 <<:二进制数据值整体左移(各二进位全部左移若干位,高位丢弃,低位补0)
-
//左移 <<:二进制数据值整体左移(各二进位全部左移若干位,高位丢弃,低位补0) int i=30; //00000000 00000000 000000000 00011110 int i1=i<<1; //00000000 00000000 000000000 00111100 //=60 System.out.println("30的向左移动一位:"+i1);
-
//>>和>>>的区别:
-
a=-1; //111111111111111111111111|1 b=a>>1;//-1 //补符号位 符号位是0还是1,我们就补相应的几位0或1 System.out.println(b); b=a>>>1;//2147483647 //补0 //111111111111111111111111111111111111 //011111111111111111111111111111111111|1 System.out.println(b); System.out.println(Integer.MAX_VALUE);//2147483647
-
(&):按位与&:二进制数据按位与操作(都为1才为1)
-
int a=6; //二进制:00000000 00000000 00000000 00000110 int b=11;//二进制:00000000 00000000 00000000 00001011 // 00000010//2 System.out.println(a&b);//2
-
(|):按位或|:二进制数据按位或操作(有1则为1)
-
int a=6; //00000000 00000000 00000000 00000110 int b=11 //00000000 00000000 00000000 00001011 //00000000 00000000 00000000 00000000 00001111 =15 System.out.println(a|b);//15
-
():按位异或:二进制数据按位异或操作(相同为假0、不同为真1)
-
int a=6; //00000000 00000000 00000000 00000110 int b=11 //00000000 00000000 00000000 00001011 //00000000 00000000 00000000 00001101 =13 System.out.println(a^b);//13
-
(~)取反:
-
int a=2; 00000000 00000000 00000000 00000010 11111111 11111111 11111111 11111101 =-3 System.out.println(~a);
-
//&& 与 &的区别:
-
boolean r=true&&false;
r=true&false;//0 false
//两者都可以进行逻辑运算,&&有短路现象,&没有短路现象
三元运算符 取值
//A?B:C
//A是一个boolean类型的结果 如果A为true,此表达式就取B的值,A为false,表达式就取C的值
a=true?12:23;
System.out.println(a);//12
a=12>0?12:13;
System.out.println(a);//12
System.out.println(12 > 0? 12:12.0);//12.0
运算符优先顺序:
2.分支判断:
1.if-else:
注意:
- 尽量避免重复条件判断(顺序先写范围大的部分)
- 就算只有一行代码也要写大括号
//定义一个年龄变量.超过60岁的,打印领取100元
//超过80岁的 领取500元
//超过90岁的,领取1000元
//超过100岁的,领取3500元
//其他年龄不领
Scanner scan=new Scanner(System.in);
int age=scan.nextInt();
if(age>=100) {
System.out.println("领取3500元");
}else if(age>=90) {
System.out.println("领取1000元");
}else if(age>=80) {
System.out.println("领取500元");
}else if(age>=60){
System.out.println("领取100元");
}else {
System.out.println("不领");
}
2.switch-case:
匹配某个变量的值,如果某一个case下被匹配到,那么就从这一行开始运行直到代码结束或者运行到break.
int sex=0;
switch(sex) {
default://所有的case项都不匹配才执行default;
System.out.println("外星人");
break;
case 0:
System.out.println("男性");
break;
case 1:
System.out.println("女性");
break;
}
- 代码顺序可以错乱,执行顺序不变
- sex=3,执行顺序还是先执行case,发现没有匹配到,就执行default.
- switch可以匹配什么值:byte short int char String(字符串),枚举(enum)
3.for循环:
for(声明计数器;继续循环的条件;计数器的递增){循环代码块}
//打印1000以内的偶数
for(int i=0;i<1000;i++) {
if(i%2==0) {
System.out.println("1000以内的偶数:"+i);
}
}