运算符

一、常见的运算符

Java 语言支持如下运算符:

  • 算术运算符:+,-,*,/,%,++(自增),--(自减)
  • 赋值运算符:=
  • 扩展赋值运算符:+=,-=,*=,/=
  • 关系运算符:>,<,>=,<=,==,!=
  • 逻辑运算符:&,|, &&,||,!,^
  • 位运算符:&,|,^,~ , >>,<<,>>> (了解!!!)
  • 条件运算符:?:

二、算术运算符、

常见的算术运算符有:

  • / 除法运算符 : 表示两个数相除运算
  • % 取余运算符: 用来求余数的
  • + 加法
  • 表示正数
  • 表示相加操作
  • 进行字符串的拼接
  • - 减法
  • * 乘法
  • ++
  • --

案例代码如下:

package com.operator;

public class Demo01 {
    //这是主方法main
    public static void main(String[] args) {
        //除法
        System.out.println(2/4);
        System.out.println(3.14/2);
        //求余数
        System.out.println(9%5);
        System.out.println(3.14%2);

        //加法
        System.out.println(4+5);
        System.out.println(3.14+5);
        System.out.println("hello"+"world");

        //减法
        System.out.println(5-6);
        System.out.println(3.56-12);

        // ++
        int i = 3;
        //做的就是i=i+1,也就是在加上1重新赋值
        i++;
        System.out.println(i);

        int a = 3;
        //做的就是a=a+1
        ++a;
        System.out.println(a);

        //上面两个案例:++单独使用的时候,无论放在前还是后,都是加1操作

        // ++在运算中使用规则:看++在前还是在后,如果++在后:先运算,后加1   如果++在前,先加1,后运算
        int m1 = 6;
        int number1 = m1++ + 3;
        System.out.println(m1);
        System.out.println(number1);

        int m2 = 6;
        int number2 = ++m2 + 3;
        System.out.println(number2);

        // --在运算中使用规则:看--在前还是在后,如果--在后:先运算,后减1   如果--在前,先减1,后运算
        int s1 = 5;
        int number3 = s1-- + 2;
        System.out.println(s1);
        System.out.println(number3);

        int s2 = 5;
        int number4 = --s2 + 2;
        System.out.println(s2);
        System.out.println(number4);
    }
}
 

三、赋值运算符

  • 赋值运算符:=
package com.augus;

public class Demo09 {
    public static void main(String[] args) {
        // =等号的作用是赋值,以案例演示:交换两个数字
        int number1 = 4396;
        int number2 = 5167;

        //定义一个中间变量
        int t;
        t = number1;

        //交换数据
        number1 = number2;
        number2 = t;

        System.out.println(number1);
        System.out.println(number2);

    }
}

四、扩展赋值运算符

扩展赋值运算符有:+=,-=,*=,/=

package com.augus;

public class Demo10 {
    public static void main(String[] args) {
        int num1 = 10;

        //在定义一个变量,做运算
        /*int sum1 = 5;
        sum1 = sum1+num1; //简写 sum1+=num1
        System.out.println(sum1);
*/
       /* int sum2 = 5;
        sum2 = sum2 - num1; // sum2 -= num1
        System.out.println(sum2);*/

        /*int sum3 = 5;
        sum3 = sum3 * num1; // sum3 *= num1
        System.out.println(sum3);*/

        int sum4 = 50;
        sum4 = sum4 / num1; // sum4 /= num5
        System.out.println(sum4);

    }
}

五、关系运算符

关系运算符:>,<,>=,<=,==,!=

public class Demo11 {
    public static void main(String[] args) {
        //关系运算符
        System.out.println(5>9); //false
        System.out.println(5<9); //true
        System.out.println(5>=9); //false
        System.out.println(5<=9); //true
        System.out.println(5==9); //false
        System.out.println(5!=9); //true
        System.out.println((5<9)!=(6==8)); //true
    }
}

六、逻辑运算符

逻辑远算符:&、|、 &&、||、!、^
逻辑运算符:进行逻辑运算的,运算符左右连接的都是 布尔类型的操作数,最终表达式的结果是布尔值:要么是true,要么false

package com.augus;

public class Demo12 {
    public static void main(String[] args) {
        // 逻辑与 :&  只要有一个操作数是false,那么结果一定是false
        System.out.println(true&true);
        System.out.println(true&false);
        System.out.println(false&false);
        System.out.println((5>4)&(9<8));


        // 短路与:&&  只要第一个表达式是false,那么第二个表达式就不用计算了,结果一定是false,计算效率高
        System.out.println(true&&true);
        System.out.println(true&&false);
        System.out.println((5>4)&&(9<8));

        // 逻辑或:| 规律:只要有一个操作数是true,那么结果一定是true
        System.out.println(true|false);
        System.out.println((5>4)|(9<8));

        // 短路或:|| 效率高一些,只要第一个表达式是true,那么第二个表达式就不用计算了,结果一定是true
        System.out.println(true||false);
        System.out.println((5>4)||(9<8));

        //逻辑非:   !  取相反结果
        System.out.println(!true);
        System.out.println(!false);

        //逻辑异或: ^  两个操作数相同,结果为false,不相同,结果为true
        System.out.println(true^true);
        System.out.println(true^false);
        System.out.println((5>4)^(9<8));
    }
}
 

七、条件运算符

条件运算符又称三元运算符
格式:

a?b:c

说明:

  • 其中a是一个布尔类型的表达式,返回结果要么是true要么false,通过a的结果决定最终表达式的结果:
  • 如果a的结果是true,那么表达式最终结果为b
  • 如果a的结果是false,那么表达式最终结果为c
package com.augus;

/**
 * @author : Augus
 * @date: 2023/5/9 16:17
 * @Description: com.augus
 * @version: 1.0
 */
public class Demo13 {
    public static void main(String[] args) {
        int number = (5<7)?6:9;
        System.out.println(number);

        String str1 = (5!=6)?"yes":"NO";
        System.out.println(str1);
        
    }
}

八、位运算符(了解)

Java提供的位运算符有:左移( << )、右移( >> ) 、无符号右移( >>> ) 、位与( & ) 、位或( | )、位非( ~ )、位异或( ^ ),除了位非( ~ )是一元操作符外,其它的都是二元操作符。如何区分逻辑运算符和位运算符:

  • 逻辑运算符:左右连接的是布尔类型的操作数
  • 位运算符:左右连接的是具体的数值
 package com.augus;

/**
 * @author : Augus
 * @date: 2023/5/9 16:36
 * @Description: com.augus
 * @version: 1.0
 */
public class Demo14 {
    public static void main(String[] args) {
        //将5左移2位:
        System.out.println(5<<2);

        /*
        运行结果是20,但是程序是怎样执行的呢?
        首先会将5转为2进制表示形式(java中,整数默认就是int类型,也就是32位):
        0000 0000 0000 0000 0000 0000 0000 0101       然后左移2位后,低位补0:
        0000 0000 0000 0000 0000 0000 0001 0100       换算成10进制为20
         */

        //右移( >> ) ,右移同理,只是方向不一样
        System.out.println(5>>2);
        /*
        还是先将5转为2进制表示形式:
        0000 0000 0000 0000 0000 0000 0000 0101 然后右移2位,高位补0:
        0000 0000 0000 0000 0000 0000 0000 0001 换算成10进制为1
        */

        //无符号右移( >>> ) 分别对5进行右移3位、 -5进行右移3位和无符号右移3位:
        System.out.println(5>>3);
        System.out.println(-5>>3);
        System.out.println(-5>>>3);
        /*
        在Java中int类型占32位,可以表示一个正数,也可以表示一个负数。正数换算成二进制后的最高位为0,负数的二进制最高为为1
        例如  -5换算成二进制后为:
        1111 1111 1111 1111 1111 1111 1111 1011

        5换算成二进制: 0000 0000 0000 0000 0000 0000 0000 0101
        5右移3位后结果为0,0的二进制为: 0000 0000 0000 0000 0000 0000 0000 0000        // (用0进行补位)
        -5换算成二进制: 1111 1111 1111 1111 1111 1111 1111 1011
        -5右移3位后结果为-1,-1的二进制为:  1111 1111 1111 1111 1111 1111 1111 1111   // (用1进行补位)
        -5无符号右移3位后的结果 536870911 换算成二进制:  0001 1111 1111 1111 1111 1111 1111 1111   // (用0进行补位)

        综上发现,正数右移,高位用0补,负数右移,高位用1补,当负数使用无符号右移时,用0进行部位(自然而然的,就由负数变成了正数了)
         */

        //位与( & )
        System.out.println(5 & 3);//结果为1
        /*
        将2个操作数和结果都转换为二进制进行比较:
        5转换为二进制:0000 0000 0000 0000 0000 0000 0000 0101
        3转换为二进制:0000 0000 0000 0000 0000 0000 0000 0011
        -------------------------------------------------------------------------------------
        1转换为二进制:0000 0000 0000 0000 0000 0000 0000 0001
        位与:第一个操作数的的第n位于第二个操作数的第n位如果都是1,那么结果的第n为也为1,否则为0
        */

        //位或( | )
        System.out.println(5 | 3);//结果为7
        /*
        5转换为二进制:0000 0000 0000 0000 0000 0000 0000 0101
        3转换为二进制:0000 0000 0000 0000 0000 0000 0000 0011
        -------------------------------------------------------------------------------------
        7转换为二进制:0000 0000 0000 0000 0000 0000 0000 0111
        位或操作:第一个操作数的的第n位于第二个操作数的第n位 只要有一个是1,那么结果的第n为也为1,否则为0
         */

        //位异或( ^ )
        System.out.println(5 ^ 3);//结果为6
        /*
        5转换为二进制:0000 0000 0000 0000 0000 0000 0000 0101
        3转换为二进制:0000 0000 0000 0000 0000 0000 0000 0011
        -------------------------------------------------------------------------------------
        6转换为二进制:0000 0000 0000 0000 0000 0000 0000 0110
        位异或:第一个操作数的的第n位于第二个操作数的第n位 相反,那么结果的第n为也为1,否则为0
         */

        //位非( ~ )           位非是一元操作符
        System.out.println(~5);//结果为-6
        /*
        5转换为二进制:0000 0000 0000 0000 0000 0000 0000 0101
        -------------------------------------------------------------------------------------
        -6转换为二进制:1111 1111 1111 1111 1111 1111 1111 1010
        位非:操作数的第n位为1,那么结果的第n位为0,反之。
         */
    }
}

九、远算符的优先级

上面的运算符的优先级关系如下:

  • 赋值<三目运算符<逻辑<关系<算术<单目

理解运算符的结合性,实际开发中我们不会写特别复杂的表达式,想先算谁就用()即可

posted @ 2023-05-09 17:23  酒剑仙*  阅读(45)  评论(0)    收藏  举报