JavaSE学习笔记——运算符

Java的运算符

java运算符:数学运算符,位运算符,逻辑运算符,自增运算符,比较运算符,三木运算符.移位运算符
运算符的封闭性:java的运算符存在封闭原则.同种类型的数据参与计算,获得同种类型的结果;如果不同类型的数据参与计算,获得大的类型的结果.

数学运算符

加(+) 减(-) 乘(*) 除(/) 取余(%)
1. 加号:如果表达式中存在字符串,可以实现拼接的功能.如果表达式是数字类型进行加法计算

    int i=1;
    double d=1.2;
    //java运算符的封闭性,int和double计算结果是double
    double result=i+d;
    System.out.println(result);

    int i1=3;
    int i2=4;
    //java运算符的封闭性,int类型和int类型计算结果为int
    int i3=i1/i2;
    System.out.println("i3="+i3);//0 
    double i4=(double)i1/i2;
    System.out.println("i4="+i4);//0.75  

    int max=0x7fff_ffff;
    int a=max+1;
    //进行运算考虑边界问题.防止数据的溢出
    System.out.println("a="+a);//a=-2147483648        

自增运算

前缀自增:++a/–a,先将a的值加1作为表达式的值.
后缀自增:a++/a–,先将a的值作为表达式的值,然后a再加1.
+= *= /= %= -=

    int a=1;
    //后缀自增,先将a的值作为a++的值,执行完成之后再将a+1
    int b=a++; //a=a+1
    System.out.println("a="+a+" ,b="+b);//a=2,b=1;

    int x=1;
    //前缀自增,先将a的值+1,然后将a的值作为整个表达式的值
    int y=++x;
    System.out.println("x="+x+" ,y="+y);//x=2,y=2       

    int z=2;
        z=z++;
    //结果z=2:java中同行代码中对于变量的赋值只能发生一次 
    System.out.println("z="+z);

    byte c=1;
    //对于自增运算符jvm可以进行优化
    byte d=++c; //d=c+1;
    System.out.println("d="+d);//d=2;
            d+=4;//d=d+4;
    System.out.println("d="+d);  

    int i=3;
        i+=4;//i=i+4;
    System.out.println("i="+i);

    int m=1;
    int n=++m+m++;
    System.out.println("n="+n+",m="+m);//n=4,m=3

位运算符

特点:对java中的整数进行位位运算.本质将整数的二进制对应的位置进行计算

1 符合 说明
按位与 & 同1为1,其他为0
按位或 | 同0为0,其他为1
异或 ^ 相同为0,不同为1
取反 ~ 一元元算符号,按位取反
    int x=3;// 0000_0011
    int y=7;// 0000_0111

    int and=x&y; //0000_0011    
    System.out.println("and="+and);//3

    int or=x|y;// 0000_0111; 
    System.out.println("or="+or);//7

    int other=x^y;//0000_0100;
    System.out.println("other="+other);//4

    int back=~x;// 24个1_1111_1100
    System.out.println("back="+back);//-4

    //练习 声明两个整数,采用位运算符实现交换
    int a=100;//‭0110_0100‬
    int b=200;//‭1100_1000‬
    System.out.println("交换前:a="+a+",b="+b);
    // result=a^b    //1010_1100
    // result^a      //1100_1000
    // result^b      //0110_0100
    int result=a^b;
    a=result^a;
    b=result^b;
    System.out.println("交换后:a="+a+",b="+b);

移位运算符

特点:java对于整型直接对其二进制进行移位操作.移位运算 >>= >>>= <<=

说明 符号 描述
左移 n<< 将n向左边移动m位,最低位使用0补充
有符号右移 n>>m 将n向右边移动m位,最高位使用符号位补充
无符号右移 n>>>m 将n向右边移动m位,最高位使用0补充
    int result=2<<3;
    System.out.println("效率最高的将2扩大八倍的写法:"+result);        

    //进行左移,可能结果为负数
    int a=2<<30;
    System.out.println("a="+a);//-2147483648
    //如果移动的位数大,实际取该数据的低五位.[移动位数对32取余]
    int b=2<<35;//16   35%32=3
    System.out.println("b="+b);

    int i=-1;//-1的二进制 32个1
    //有符号的右移,最高位使用符号位补充
    int c=i>>1;
    System.out.println("c="+c);//c=-1
    int d=i>>>1;//无符号右移,最高位使用0补充
    System.out.println("d="+d);// d=0x7fff_ffff

    byte f=0b0110_0100;//100
    //获得f的高四位0000_0110 和低四位0000_0100
    //低四位
    byte low=(byte)(f&0x0f);//(byte)(f&0B0000_1111);//4
    System.out.println(low);
    //高四位
    //1.需要将高四位变为低四位 采用无符号右移运算
    byte high=(byte)((f>>>4)&0xf);
    System.out.println("high="+high);//6

比较运算符

特点:比较关系,比较运算符的结果为一个布尔类型.>= <= == !=,注意:java中等号是赋值的符号,双等号采用比较变量值的比较运算符.

   boolean flag=1==2;//flag=false
   //描述age的范围在 [22,40]
   int age = 18;
  // boolean noHappy=22<=age<=40;//编译报错,java中不支持连续判断

逻辑运算符

特点:表达式之间的逻辑关系

说明 语法 描述
exp1 && exp2 如果exp1和exp2都为true,结果为true,否则为false
exp1 || exp2 如果epx1和exp2都为false,结果为false,则为true
!exp1 取反,如同exp1为true,结果为false
    Scanner sc=new Scanner(System.in);
    System.out.println("请输入年龄:");
    int age=sc.nextInt();
    //表示age是否在[22,40]
    // boolean noHappy=(age>=22 && age<=40);
    boolean noHappy=(age>=22 & age<=40);
    System.out.println("青年人:"+noHappy);
    //表示age的范围小于18,大于60
    // boolean happy=(age<=18 || age>=60);
    boolean happy=(age<=18 | age>=60);
    System.out.println("豆蔻年华:"+happy);
  1. &&和&,||和 |的区别?
    • &,|既可以作为位运算符又可以作为逻辑运算符
    • &&,||只能作为逻辑运算符
    • &&,||具有短路的功能,&,|做为逻辑运算符不具备短路功能
    • 短路的概念:在逻辑表达式中,如果第一个表达能够判断整个表达式的值,那么第二个表达式不会执行.建议使用&&和||作为逻辑运算符,可以提高程序执行的效率
    int x=1;
    int y=2;
    boolean flag=(x++>0||--y<2);//具有短路功能
    System.out.println("flag="+flag+" ,x="+x+" ,y="+y);//true,2,2

    int a=1;
    int b=2;
    boolean flag2=(a++>0|--b<2);//不具备短路功能
    System.out.println("flag2="+flag2+" ,a="+a+" ,b="+b);//true,2,1

    int i=1;
    int j=2;
    int k=3;
    //建议:如果需要连续判断,建议使用括号进行分组
    boolean flag3=(i++>0 || j--<3 && --k<3);
    //等价于 flag3= (i++>0) || (j--<3 && --k<3) ;
    //true,2,2,3
    System.out.println("flag3="+flag3+" ,i="+i+" ,j="+j+" ,k="+k);

三目运算符

特点:三目运算符就是if..else的简写.基本语法: 布尔表达式?为true的结果:为false的结果

    Scanner sc=new Scanner(System.in);
    System.out.println("请输总记录数:");
    int total=sc.nextInt();
    System.out.println("每页显示的记录数:");
    int pageSize=sc.nextInt();
    //计算总页数
    /*
    int size=0;
    if(total%pageSize==0){//说明可以整除
        size=total/pageSize;
    }else{
        size=total/pageSize+1;
    }
    */
    //三目(三元)运算
    int size=total%pageSize==0?total/pageSize:total/pageSize+1;
    System.out.println("总页数为:"+size);

三木运算符可以进行嵌套

    //案例:从控制台输入3个整数,使用三木运算符获得其中的最大值(三木运算符的嵌套)
    System.out.println("请输入三个整数");
    int a=sc.nextInt();
    int b=sc.nextInt();
    int c=sc.nextInt();
    //获得最大值
    int max=a>b?(a>c?a:c):(b>c?b:c);//三木运算符可以进行嵌套
    System.out.println("max="+max);

你可能感兴趣的:(Java)