1.算数运算符
class yunsuanfu{
public static void main(String[] args){
//%取余运算
//结果的符号与被模数的符号相同
//开发中,通常使用%来判断能否被除尽的情况
int n1=12;
int m1=5;
System.out.println("n1%m1="+n1%m1);//2
int n2=-12;
int m2=5;
System.out.println("n2%m2="+n2%m2);//-2
int n3=12;
int m3=-5;
System.out.println("n3%m3="+n3%m3);//2
int n4=-12;
int m4=-5;
System.out.println("n4%m4="+n4%m4);//-2
//(前)++:先自增1,后运算
//(后)++:先运算,后自增1(自增1不会改变数据类型)
int a1=10;
int b1=++a1;
System.out.println("a1="+a1+",b1="+b1);//a1=11,b1=11
int a2=10;
int b2=a2++;
System.out.println("a2="+a2+",b2="+b2);//a2=11,b2=10
}
}
2.赋值运算符
***** +=, -=, *=, /=, %=
class yunsuanfu{
public static void main(String[] args){
int i1=10;
int j1=10;//赋值符号:=
int i2,j2;
i2=j2=10; //连续赋值
int i3=10,j3=30;
//******************
int num1=10;
num1 +=2; //num1=num1+2
System.out.println(num1);//12
int num2=12;
num2 %=5;
System.out.println(num2); //2
short s1=10;
s1 +=2;
System.out.println(s1); //12,不会改变变量本身的数据类型
//s1=s1+2,编译失败
//开发中,如果希望变量实现+2的操作,有几种方法?
//方法一:num =num+2
//方法二:num +=2;(推荐)
//开发中,如果希望实现变量+1的操作,有几种方法?
//一:num=num+1
//二:num +=1
//三:num++
}
}
3.比较运算符
class yunsuanfu{
public static void main(String[] args){
//比较运算符的结果是:布尔型
//区分==和=
int i=10;
int j=20;
System.out.println(i==j);//false
System.out.println(i=j);//20
boolean b1=true;
boolean b2=false;
System.out.println(b1==b2);//false
System.out.println(b1=b2);//flase
}
}
4.逻辑运算符
class yunsuanfu{
public static void main(String[] args){
//区分&与&&
//相同点:&与&&运算结果相同
//当符号右边为true时,都会执行符号右边的运算
//不同点:当符号左边是false是,&会继续执行符号右边的运算,&&则不会
boolean b1=true;
b1=false;
int num1=10;
if(b1 & (num1++>0)){
System.out.println("我现在在北京");
}else{
System.out.println("我现在在南京");
}
System.out.println("num1="+num1);
//我现在在南京
// num1=11
boolean b2=true;
b2=false;
int num2=10;
if(b2 && (num2++>0)){ //&&前面是true,就全都执行,如果为false,只有前面执行
System.out.println("我现在在北京");
}else{
System.out.println("我现在在南京");
}
System.out.println("num2="+num2);
//我现在在南京
// num2=10
//区分:|与||
//相同点:|与||运算结果相同
//相同点:当符号左边为false时,二者都会执行符号右边的运算
//不同点:当符号左边为true时,|继续执行符号右边的运算,而||则终止
boolean b3=true;
int num3=10;
if(b3 | (num3++>0)){
System.out.println("我现在在北京");
}else{
System.out.println("我现在在南京");
}
System.out.println("num3="+num3);
boolean b4=true;
int num4=10;
if(b4 || (num4++>0)){
System.out.println("我现在在北京");
}else{
System.out.println("我现在在南京");
}
System.out.println("num4="+num4);
// 我现在在北京
// num3=11
// 我现在在北京
// num4=10
}
}
5位运算符(无<<<)
class BitTest{
public static void main(String[] args){
//位运算符操作的都是整形数据
//<<:一定范围内,每向左移一项,相当于*2
//>>:每向右移一位,相当于/2
//面试题:最高效的方式计算2*8:2<<3,8<<1
int i=21;
System.out.println("i<<2:"+(i<<2));//84
System.out.println("i<<3:"+(i<<3));//168
System.out.println("i<<4:"+(i<<4));//336
System.out.println("i<<26:"+(i<<26));//i<<26:1409286144
System.out.println("i<<27:"+(i<<27));//i<<27:-1476395008
int n=12;
int m=5;
System.out.println("n&m="+(n&m));//4
System.out.println("n|m="+(n|m));//13
System.out.println("n^m="+(n^m));//9
//交换两个变量的值
int num1=10;
int num2=20;
//方法一:定义临时变量
/*int temp=num1;
num1=num2;
num2=temp;
System.out.println("num1="+num1+",num2="+num2);*/
//方式二:好处:不用定义临时变量
// 弊端:相加减可能超出存储范围,有局限性,只能适用于数据类型
/*num1=num1+num2;
num2=num1-num2;
num1=num1-num2;
System.out.println("num1="+num1+",num2="+num2);*/
//方式三:位运算符
num1=num1^num2;
num2=num1^num2;
num1=num1^num2;
System.out.println("num1="+num1+",num2="+num2);
}
}
6.三元运算符
//三元运算符
//结构 (条件表达式)?表达式一:表达式二
//条件表达式的结果为boolean型
//如果表达式为true,则执行表达式一,否则执行表达式二
//表达式一与表达式二类型相同(int与float属于同一类型)
//三元运算符可以嵌套
//凡是使用三元运算符都可以改写成if-else语句,反之不成立(if -else更普遍使用)
class yunsuanfu{
public static void main(String[] args){
//获取两个表达式的最大值
int m=12;
int n=5;
int max=(m>n)?m:n;
System.out.println(max);
double num=(m>n)?2:1.0;
System.out.println(num);//2.0
//(m>n)?2:"n大";//编译错误
n=12;
String maxstr=(m>n)?"m大":((m==n)?"m与n相等":"n大");
System.out.println(maxstr);
//获取三个数的最大值
int n1=12;
int n2=30;
int n3=-34;
int max1=(n1>n2)?n1:n2;
int max2=(max1>n3)?max1:n3;
System.out.println(max2); //30
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);
}
}
}
}