算术运算符
六种运算符,不同体验(((φ(◎ロ◎;)φ)));
一、除数,取余
- 除号
int num1=12;
int num2=5;
int result1=num1/num2;
System.out.println(result1);//2
int result2=num1/num2*num2;
System.out.println(result2);//10
//先运算右边然后赋值给左边
double result3=num1/num2;
System.out.println(result3);//2.0
double result4=num1/num2+0.0;//2.0
double result5=num1/(num2+0.0);//2.4,右边已是浮点型;
System.out.println(result5);
//强制转换
double result6=(double)num1/num2;
System.out.println(result6);//2.4
double result7=(double)(num1/num2);
System.out.println(result7);//2.0
- 取余运算
%:取余运算
结果的符号与被模数的符号相同
开发中,经常使用%来判断能否被除尽的情况;
int m1=12;
int n1=5;
System.out.println("m1%n1="+m1%n1);//2
int m2=-12;
int n2=5;
System.out.println("m2%n2="+m2%n2);//-2
int m3=12;
int n3=-5;
System.out.println("m3%n3="+m3%n3);//2
int m4=-12;
int n4=-5;
System.out.println("m4%n4="+m4%n4);//-2
练习:随意给出一个整数,打印显示它的个数,十位数,百位数的值。
格式如下:
数字xxx的情况如下:
个位数:
十位数:
百位数:例如:
数字153的情况如下:
个位数:3
十位数:5
百位数:1
class SggYunlx{
public static void main(String[] args){
int num=666;
int bai=num/100;
int shi=num/10%10;
int ge=num%10;//Bug:除号和取余号用混,脑子想的取余
System.out.println("百位数为:"+bai);
System.out.println("十位数为:"+shi);
System.out.println("个位数为:"+ge);
}
}
二、关系运算符
关系运算符用于比较两个数值之间的大小,其运算结果为一个逻辑类型(boolean布尔类型)的数值。
*等于’==’*,*不等于’!=’*,*大于’>’*,*大于等于’>=’*,*小于’<’*,小于等于’<='
三、赋值运算
- 练习1:
short s=3;
//s=s+2;编译不通过,精度损失;
s+=2;//不会改变数据类型;
- 练习2:
int i=1;
i*=0.1;
System.out.println(i);//0
i++;
System.out.println(i);//1
- 练习3:
int m=3;
int n=3;
n*=m++;
System.out.println("m="+m);//4
System.out.println("n="+n);//9
- 练习4:
int t=10;
t+=(t++)+(++t);//Bug:(t++)先和前面相加,再自运算t;
System.out.println(t);//32
四、逻辑运算
逻辑运算符
& && | || ! ^
说明:
逻辑运算符操作的都是boolean类型的变量
- 区分&与&&
- &
boolean b1=true;
b1=false;
int num1=10;
if(b1 &(num1++ > 0)){
System.out.println("我现在在商洛学院");
}else{
System.out.println("我现在在北新街科技大学");
}
System.out.println("num1="+num1);
- &&
boolean b2=true;
b2=false;
int num2=10;
if(b2 && (num2++ > 0)){
System.out.println("我现在在商洛学院");
}else{
System.out.println("我现在在北新街科技大学");
}
System.out.println("num2="+num2);
- 相同点1:&与&&的运算结果相同
- 相同点2:当符号左边是true时,二者都会执行符号右边的运算
- 不同点:当符号左边是false时,&继续执行符号右边的运算,&&不在执行右边的运算;
- 开发中,推荐使用&&
- 区分:|与||
boolean b3=false;
b3=true;
int num3=10;
if(b3 | (num3++ > 0)){
System.out.println("我现在在商洛学院");
}else{
System.out.println("我现在在北新街科技大学");
}
System.out.println("num3="+num3);
boolean b4=false;
b4=true;
int num4=10;
if(b4 || (num4++ > 0)){
System.out.println("我现在在商洛学院");
}else{
System.out.println("我现在在北新街科技大学");
}
System.out.println("num4="+num4);
- 相同点1:|与||的运算结果相同;
- 相同点2:当符号左边边是false时,二者都会执行符号右边的运算
- 不同点:当符号左边是true时,|继续执行运算,而||不再执行符号右边的运算。
- 开发中,推荐使用||
- 练习1:
int x=1;
int y=1;
if(x++==2 & ++y==2){
x=7;
}
System.out.println("x="+x+",y="+y);//x=2,y=2
- 练习2:
int x1=1,y1=1;
if(x1++==2 && ++y1==2){
x1=7;
}
System.out.println("x1="+x1+",y1="+y1);//x=2,y=1
- 练习3:
int x2=1,y2=1;
if(x2++==1 | ++y2==1){
x2=7;
}
System.out.println("x2="+x2+",y2="+y2);//x=7,y=2
- 练习4:
int x3=1,y3=1;
if(x3++==1 || ++y3==1){
x3=7;
}
System.out.println("x3="+x3+",y3="+y3);//x=7,y=1
- 练习5:
boolean x4=true;
boolean y4=false;
short z=42;
//if(y==true)
if((z++==42)&&(y4=true))z++;
if((x4=false)||(++z==45))z++;
System.out.println("z="+z);//46
五、位运算符
int i=21;
System.out.println("i<<2:"+(i<<2));//84
System.out.println("i<<3:"+(i<<3));//168
System.out.println("i<<26:"+(i<<26));//1409286144
//物极必反
System.out.println("i<<27:"+(i<<27));//-1476395008
int m=12;
int n=5;
System.out.println("m&n:"+(m&n));//4
System.out.println("m|n:"+(m|n));//13
System.out.println("m^n:"+(m^n));//9
1.位运算符操作的都是整型的数据
2.<<:在一定范围内,每向左移1位,相当于 * 2;
>>:在一定范围内,每向右移1位,相当于 / 2;
面试题:最高效的计算2*8? 2<<3或8<<1
- 练习:交换俩个变量的值
int num1=10;
int num2=20;
System.out.println("num1="+num1+",num2="+num2);
//方式1:定义临时变量的方式
int temp=num1;
num1=num2;
num2=temp;
//方式二:好处:不用定义临时变量
//弊端:相加操作可能超出存储范围,有局限性;只能适用于数值类型
//num1=num1+num2;
//num2=num1-num2;
//num1=num1-num2;
//方式三:用位运算符
//有局限性;只能适用于数值类型
//num1=num1^num2;
//num2=num1^num2;
//num1=num1^num2;
System.out.println("num1="+num1+",num2="+num2);
六、三元运算符
-
1.(条件表达式)?表达式1:表达式2
-
2.说明
- 条件表达式的结果位boolean类型
- 根据表达式真或假,决定执行表达式1,还是表达式2.
- 如果表达式为true,则执行表达式1。
- 如果表达式为false,则执行表达式2.
- 表达式1和表达式2要求是一致的。
- 三元运算符可以嵌套使用
-
3.凡是可以使用三元运算符的地方,都可以改写为if—else
反之,不成立;
4.如果程序既可以使用三元运算符,又可以使用if-else结构,那么有限选择三元运算符:原因:简介、执行效率高;
-
练习1:获取俩个整数的较大值
int m=12;
int n=5;
int max=(m>n)?m:n;
System.out.println(max);
- 练习2:获取俩个整数的较大值(>=情况)
int m2=12;
int n4=5;
String maxStr=(m2>n4)?"m2大":((m2==n4)?"m2和n4相等":"n4大");
System.out.println(maxStr);
- 练习3:获取三个数的最大值
int n1=12;
int n2=30;
int n3=-43;
int max1=(n1>n2)?n1:n2;
int max2=(max1>n3)?max1:n3;
System.out.println("三个数中的最大值为:"+max2);
//不建议
//int max3=((n1>n2)?n1:n2)>n3)?((n1>n2)?n1:n2):n3;
//System.out.println("三个数中的最大值为:"+max3);
//读写成if—else:
if(m>n){
System.out.println(m);
}else{
System.out.println(n);
}
);
- 练习3:获取三个数的最大值
int n1=12;
int n2=30;
int n3=-43;
int max1=(n1>n2)?n1:n2;
int max2=(max1>n3)?max1:n3;
System.out.println("三个数中的最大值为:"+max2);
//不建议
//int max3=((n1>n2)?n1:n2)>n3)?((n1>n2)?n1:n2):n3;
//System.out.println("三个数中的最大值为:"+max3);
//读写成if—else:
if(m>n){
System.out.println(m);
}else{
System.out.println(n);
}