Java中的各种运算符

目录

一、关于运算符

二、赋值运算符

        1.赋值运算符有哪些。

        2.例子1。

三、关系运算符

        1.关于关系运算符。

        2.例子2。

四、逻辑运算符

        1.关于逻辑运算符。

        2.例子3(&,|,^,!)。

        3.关于%%和||

        4.例子4(%%和||)

五、三目运算符(三元运算符)

        1.什么是三目运算符。

        2.例子5

六、位运算符(稍微难点)

        1.关于位运算符 

         2.详解

  


一、关于运算符

        1.运算:对常量和变量进行操作的过程叫做运算;

        2.运算符:对常量和变量进行操作的符号称作运算符;

        3.操作数:参与运算的数据;

        4.表达式:用运算符把常量或者变量连接起来符号并且符合java语法的式子就可以称为表达式。 不同运算符连接的式子体现的是不同类型的表达式;

5.算术运算符:+,-,*,/,%,++,--。

6.各种运算符的优先级:

 

二、赋值运算符

        1.赋值运算符有哪些。

                赋值运算符: = , +=, -=, *=, /=, %= 。其中我们一直在使用的也是最常用的:=

        2.例子1。

、        例子①:

public class OptFuZhiDemo1 {
    public static void main(String[] args) {
//        int a = 10;
//        int b = a;
//        System.out.println(a);
//        System.out.println(b);

        // +=
//        int a += 10;
        int a = 10;
        a += 20; //这里实际上可以看作为a的值加上了一个20再赋值给a,但是不能完全等于 a = a + 20;
        System.out.println(a);

        //-=
        a-=10;
        System.out.println(a); //20

        //*=
        a*=2;
        System.out.println(a); //40

        // /=
        a/=2;
        System.out.println(a); //20

        // %=
        a%=3;
        System.out.println(a); //2


    }
}

                例子②

/*
    short s=1, s = s+1;
    short s=1, s += 1;
    上面两个代码有没有问题,如果有,那里有问题
    第一个有问题,因为变量参与运算,首先会提升数据类型,然后做运算。所以 s = s+1;s会提升到int类型然后再做加法运算,最终的
    结果是int类型,所以拿short类型接收会报错,所以要想成功赋值,就得强制类型转换。

    第二个代码没有问题,是因为内部自动包含了强制类型转换,s+=1 ===>  s = (s的数据类型)(s+1)


 */
public class OptFuZhiDemo2 {
    public static void main(String[] args) {
//        short s = 1;
//        s = (short)(s + 1);

        short s = 1;
        s+=1;
        System.out.println(s);
    }
}

三、关系运算符

        1.关于关系运算符。

                常见的关系运算符有 ==,!=,>,<,>=,<=。

                注意事项:①关系运算符的表达式的结果是一个boolean类型,要么是true,要么是false;

                                 ②==不能少写,一个=是赋值运算符,==才是关系运算符;

                                 ③赋值的时候要注意类型问题,关系运算符表达式的结果是boolean类型,所以接收的时候只能是boolean类型的变量接收。

        2.例子2。

                

public class OptGuanXiDemo1 {
    public static void main(String[] args) {
        int a = 3;
        int b = 9;
        boolean flag = (a == b);
//        int flag2 = (a == b);
        System.out.println(flag);

        //!=
        System.out.println(a != b);

        //>
        System.out.println(a>b);

        //<
        System.out.println(a<b);

        //>=
        a = 4;
        System.out.println(a>=b);

        //<=
        System.out.println(a<=b);

        System.out.println(a==b);
        System.out.println(a=b);
    }
}

四、逻辑运算符

        1.关于逻辑运算符。

                ①&,|,^,!,&&,|| 

                ②逻辑运算符的两边放的是boolean类型的值,计算的结果也是一个boolean类型的值

                        &: 参与运算的时候,两边有false,则false,两边都做运算

                        |: 参与运算的时候,两边有true,则true,两边都做运算

                        ^: 参与运算的时候,相同为false,不同为true,两边都做运算

                        !: 将true变成false,false变成true

        2.例子3(&,|,^,!)。

                

public class OptLogicDemo1 {
    public static void main(String[] args) {
//        int a = 3;
//        int b = 4;
//        System.out.println(a&b);

        int a = 3;
        int b = 4;

        // &
//        System.out.println((a++ == 3) & (b++ == 4)); //左边true,右边也是true,结果是true,两边都做运算
//        System.out.println("a:" + a + ",b:" + b);
//        System.out.println((a++ == 4) & (b++ == 4)); //左边是false,右边是true,结果是false,两边都做运算
//        System.out.println("a:" + a + ",b:" + b);
//        System.out.println((a++ == 3) & (b++ == 5)); //左边是true,右边是false,结果是false,两边都做运算
//        System.out.println("a:" + a + ",b:" + b);
//        System.out.println((a++ == 4) & (b++ == 5)); //左边是false,右边是false,结果是false,两边都做运算
//        System.out.println("a:" + a + ",b:" + b);


        // |
//        System.out.println((a++ == 3) | (b++ == 4)); //左边true,右边也是true,结果是true,两边都做运算
//        System.out.println("a:" + a + ",b:" + b);
//        System.out.println((a++ == 4) | (b++ == 4)); //左边是false,右边是true,结果是true,两边都做运算
//        System.out.println("a:" + a + ",b:" + b);
//        System.out.println((a++ == 3) | (b++ == 5)); //左边是true,右边是false,结果是true,两边都做运算
//        System.out.println("a:" + a + ",b:" + b);
//        System.out.println((a++ == 4) | (b++ == 5)); //左边是false,右边是false,结果是false,两边都做运算
//        System.out.println("a:" + a + ",b:" + b);

        // ^
//        System.out.println((a++ == 3) ^ (b++ == 4)); //左边true,右边也是true,结果是false,两边都做运算
//        System.out.println("a:" + a + ",b:" + b);
//        System.out.println((a++ == 4) ^ (b++ == 4)); //左边是false,右边是true,结果是true,两边都做运算
//        System.out.println("a:" + a + ",b:" + b);
//        System.out.println((a++ == 3) ^ (b++ == 5)); //左边是true,右边是false,结果是true,两边都做运算
//        System.out.println("a:" + a + ",b:" + b);
//        System.out.println((a++ == 4) ^ (b++ == 5)); //左边是false,右边是false,结果是false,两边都做运算
//        System.out.println("a:" + a + ",b:" + b);

        // !
        System.out.println(!((a++ == 4) ^ (b++ == 5)));


    }
}

        3.关于%%和||

                     &&: 短路与,结果和单个与结果一样,有false则false,但是执行的东西不一样, 当&&左边的表达式结果为false的时候,结果是false,右边不执行 ;

                      ||: 短路或,结果和单个或结果一样,有true则true,但是执行的东西不一样, 当||左边是true的时候,右边不执行,结果是true.

             ( 逻辑运算符用于连接布尔型表达式,在Java中不可以写成3<x<6,应该写成x>3 & x<6。

        4.例子4(%%和||

        

public class OptLogicDemo2 {
    public static void main(String[] args) {
        int a = 3;
        int b = 4;

        // &
//        System.out.println((a++ == 3) & (b++ == 4)); //左边true,右边也是true,结果是true,两边都做运算
//        System.out.println("a:" + a + ",b:" + b);
//        System.out.println((a++ == 4) & (b++ == 4)); //左边是false,右边是true,结果是false,两边都做运算
//        System.out.println("a:" + a + ",b:" + b);
//        System.out.println((a++ == 3) & (b++ == 5)); //左边是true,右边是false,结果是false,两边都做运算
//        System.out.println("a:" + a + ",b:" + b); // 4,5
//        System.out.println((a++ == 4) & (b++ == 5)); //左边是false,右边是false,结果是false,两边都做运算
//        System.out.println("a:" + a + ",b:" + b); //

        System.out.println("====================================================================");
        a = 3;
        b = 4;
        // &&
//        System.out.println((a++ == 3) && (b++ == 4)); //左边true,右边也是true,结果是true,两边都做运算
//        System.out.println("a:" + a + ",b:" + b);
//        System.out.println((a++ == 4) && (b++ == 4)); //左边是false,右边是true,结果是false,两边都做运算
//        System.out.println("a:" + a + ",b:" + b); //a:4,b:4
//        System.out.println((a++ == 3) && (b++ == 5)); //左边是true,右边是false,结果是false,两边都做运算
//        System.out.println("a:" + a + ",b:" + b);
//        System.out.println((a++ == 4) && (b++ == 5)); //左边是false,右边是false,结果是false,两边都做运算
//        System.out.println("a:" + a + ",b:" + b); //a:4,b:4
        System.out.println("====================================================================");
        a = 3;
        b = 4;
        // |
        System.out.println((a++ == 3) | (b++ == 4)); //左边true,右边也是true,结果是true,两边都做运算
        System.out.println("a:" + a + ",b:" + b);
        System.out.println((a++ == 4) | (b++ == 4)); //左边是false,右边是true,结果是false,两边都做运算
        System.out.println("a:" + a + ",b:" + b); //a:4,b:4
        System.out.println((a++ == 3) | (b++ == 5)); //左边是true,右边是false,结果是false,两边都做运算
        System.out.println("a:" + a + ",b:" + b);
        System.out.println((a++ == 4) | (b++ == 5)); //左边是false,右边是false,结果是false,两边都做运算
        System.out.println("a:" + a + ",b:" + b); //a:4,b:4
        System.out.println("====================================================================");
        a = 3;
        b = 4;
        // ||
//        System.out.println((a++ == 3) || (b++ == 4)); //左边true,右边也是true,结果是true,两边都做运算
//        System.out.println("a:" + a + ",b:" + b); //a:4,b:4
//        System.out.println((a++ == 4) || (b++ == 4)); //左边是false,右边是true,结果是false,两边都做运算
//        System.out.println("a:" + a + ",b:" + b); //a:4,b:5
//        System.out.println((a++ == 3) || (b++ == 5)); //左边是true,右边是false,结果是false,两边都做运算
//        System.out.println("a:" + a + ",b:" + b); //a:4,b:4
//        System.out.println((a++ == 4) || (b++ == 5)); //左边是false,右边是false,结果是false,两边都做运算
//        System.out.println("a:" + a + ",b:" + b); //a:4,b:5

        //java不支持连续比较
//        System.out.println(20>a>10);
        System.out.println((a<20 & a>10));

    }
}

                

五、三目运算符(三元运算符)

        1.什么是三目运算符。

                      格式:(关系表达式)?表达式1:表达式2;

                        如果关系表达式的结果为true,运算后的结果是表达式1;

                       如果关系表达式的结果为false,运算后的结果是表达式2;

注意事项:
    1、三目运算符表达式的结果数据类型由三目运算符表达式1和表达式2中最大的数据类型决定的。
    2、关系表达式一定只能是boolean类型

        2.例子5

                

public class OptSanMuDemo1 {
    public static void main(String[] args) {
        //求出a,b中的最大值
        int a = 10;
        int b = 30;
        //三目运算符解决
        int c = (a>b)?a:b;

        //面试题:int a = 20;double b = 30.0;(a>b)?a:b
        int a1 = 20;
        double b1 = 30.0;
        double c1 = (a1>b1)?a1:b1;
        System.out.println(c1);


    }
}

                

六、位运算符(稍微难点

        1.关于位运算符 

                      位运算符:<<,>>,>>>,&,|,^,~

         2.详解

                        

public class OptWeiDemo1 {
    public static void main(String[] args) {
        byte a = 3;
        byte b = 4;
        System.out.println(a&b);
        System.out.println(a|b);
        System.out.println(a^b);
        System.out.println(~a); //-4
    }
}
/*
        由于数据在计算机中参与运算的都是补码,而想要知道补码,就得知道反码,原码,就得求出二进制
        3的二进制:00000011
        4的二进制:00000100  
        又由于3和4都是正数
        3的补码:00000011
        4的补码:00000100

        & 运算:有0则0
            00000011
         &
            00000100
        ---------------
            00000000

        结果是 : 0

        ====================================

        | 运算:有1则1
            00000011
         |
            00000100
        --------------
            00000111

        结果是:7

        ====================================

        ^ 运算:相同则0,不同则1
            00000011
         ^
            00000100
        --------------
            00000111

        结果是:7

        ====================================

        ~ 运算:1变成0,0变成1
            00000011
        ~
        -------------
        补码:     11111100
        已知补码求原码:
        反码:     11111011
        原码:     10000100

        结果是:-4

 */

  

特别:

        位运算符: <<: 左移,二进制左移,右边用0补齐,多出来的丢弃

                           >>: 右移,最左边最高位是0用0补齐,最高位是1就用1补齐,多出来的丢弃。                            >>>: 无符号右移,无论左边最高是0还是1,都用0补齐,多出来的丢弃。

        

public class OptWeiDemo2 {
    public static void main(String[] args) {
        System.out.println(3<<2); //12 = 3*4 = 3*2^2
        System.out.println(24>>2); //6 = 24/(2*2)
        System.out.println(-24>>2);// -6
        System.out.println(-24>>>2);//1073741818

        System.out.println(3<<3); // 3*2^3


        //请用最有效率的方式写出计算2乘以8的结果
//        System.out.println(2*8);
        System.out.println(2<<3);
    }
}

/*
       <<: 左移,二进制左移,右边用0补齐
       3的二进制:00000000 00000000 00000000 00000011
       由于3是正数,所以原码,反码,补码都一样
       3的补码:00000000 00000000 00000000 00000011
       左移:
            00000000 00000000 00000000 00000011
        (00)00000000 00000000 00000000 00001100   (补码)
      由于最高位是0,既是补码也是原码,所以结果是:  12

      ================================================================
      >>: 右移,最左边最高位是0用0补齐,最高位是1就用1补齐,多出来的丢弃。
      24的二进制:00000000 00000000 00000000 00011000
      由于24是正数,所以原码,反码,补码都一样
      24的补码:00000000 00000000 00000000 00011000
      右移:
              00000000 00000000 00000000 00011000
              0000000000 00000000 00000000 000110(00)  (补码)
      由于最高位是0,既是补码也是原码,所以结果是:6

      ================================================================
      >>: 右移,最左边最高位是0用0补齐,最高位是1就用1补齐,多出来的丢弃。
      -24的二进制:10000000 00000000 00000000 00011000
      已知原码求补码:
        原码:10000000 00000000 00000000 00011000
        反码:11111111 11111111 11111111 11100111
        补码:11111111 11111111 11111111 11101000
      右移:
            11111111 11111111 11111111 11101000
            1111111111 11111111 11111111 111010(00)  (补码)
      已知补码求原码:
        补码:11111111 11111111 11111111 11111010
        反码:11111111 11111111 11111111 11111001
        原码:10000000 00000000 00000000 00000110
        最终结果是:-6

        ==============================================================
        >>>: 无符号右移,无论左边最高是0还是1,都用0补齐,多出来的丢弃。
        -24的二进制:10000000 00000000 00000000 00011000
      已知原码求补码:
        原码:10000000 00000000 00000000 00011000
        反码:11111111 11111111 11111111 11100111
        补码:11111111 11111111 11111111 11101000
        无符号右移2位:
             11111111 11111111 11111111 11101000
             0011111111 11111111 11111111 111010(00)   (补码)
        由于最高位是0,所以它的原码,反码,补码都是一样的。
        最终结果位:0011111111 11111111 11111111 111010 = 1073741818


 */

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值