Java语言基础-运算符大礼包(加练习题)

算术运算符

运算符运算范例结果
+正号+33
-符号-4-4
+3+47
-6-42
*2*36
/6/23
%取模(取余)7%52
++自增,先运算后取值a=2;b=++aa=3;b=3
++自增,先取值后运算a=2;b=a++a=3;b=2
自减,先运算后取值a=2;b=–aa=1;b=1
自减,先取值后运算a=2;b=a–a=1;b=2
+字符串连接“He”+“llo”“Hello”
class AriTest{
    public static void main(String[] args) {
        int a = 2;
        int b = 4;
        int c = 7;
        String d = "He";
        String e = "llo";
        // +
        System.out.println("a+b: " + (a + b));
        // -
        System.out.println("b-a: " + (b - a));
        // *
        System.out.println("a*b: " + (a * b));
        // /
        System.out.println("b/a: " + (b / a));
        System.out.println("c/a: " + (c / a));  // 整型除于整型的结果还是整型
        double f = c / a;
        System.out.println("f: " + f);          // c / a的结果是整数3,转化为double类型就是3.0 
        double g = c / (a + 0.0);
        System.out.println("g: " + g);          // 先将其中一个数转换为小数再进行运算,结果就是3.5 
        // %
        int h = -4;
        int i = -7;
        System.out.println("c%b: " + (c % b));  // 7 / 4 = 1 ··· 3
        System.out.println("c%h: " + (c % h));  // 7 / -4 = -1 ··· 3
        System.out.println("i%b: " + (i % b));  // -7 / 4 = -1 ··· -3
        System.out.println("i%h: " + (i % h));  // -7 / -4 = 1 ··· -3   被模数为负数,结果就是负数
        // ++
        System.out.println("a++: " + (a ++));   // 这条语句执行完之后,a == 3
        System.out.println("++a: " + (++ a));   // 这条语句执行完之后,a == 4
        // byte j = 127;
        // System.out.println("j++: " + (j ++)); 这样写会报错,因为自增不会改变数据类型。
        // --
        System.out.println("a--: " + (a --));   // 这条语句执行完之后,a == 3
        System.out.println("--a: " + (-- a));   // 这条语句执行完之后,a == 2
        // +
        System.out.println("d+e: " + (d + e));


        // 练习题
        int i1 = 10;
        int i2 = 20;
        int i3 = i1++;
        System.out.print("i3= " + i3);
        System.out.println(",i1= " + i1);   // i3= 10,i1= 11
        i3 = ++ i1;
        System.out.print("i3= " + i3);
        System.out.println(",i1= " + i1);   // i3= 12,i1= 12
        i3 = i2--;
        System.out.print("i3= " + i3);
        System.out.println(",i2= " + i2);   // i3= 20,i2= 19
        i3 = --i2;
        System.out.print("i3= " + i3);
        System.out.println(",i2= " + i2);   // i3= 18,i2= 18              
    }
}

赋值运算符

当“=”两侧数据类型不一致时,可以使用自动类型或使用强制类型转换原则进行处理。

支持连续赋值。

运算符运算范例结果
=等于a=33
+=加等于a+=14
-=减等于a-=13
*=乘等于a*=26
/=除等于a/=23
%=模除等于a%=21
class SetValueTest {
    public static void main(String[] args) {
        // =
        int i1 = 10;
        byte j1 = 10;
        
        int i2,j2;
        // 连续赋值
        i2 = j2 = 10;

        int i3 = 10 , j3 = 10;


        // +=
        i1 += 1;
        System.out.println(i1);

        j1 += 1; // 不会改变数据类型
        System.out.println(j1);

        // -=
        i2 -= 1;
        System.out.println(i2);

        // *=
        j2 *= 2;
        System.out.println(j2);

        // /=
        i3 /= 2;
        System.out.println(i3);

        // %=
        j3 %= 4;
        System.out.println(j3);
        
        // 练习1
        int num1 = 1;
        num1 *= 0.1; // 1*0.1=0.1  但是num1是int类型,取整后是0
        System.out.println(num1); // 0  
        num1++;
        System.out.println(num1); // 1

        // 练习2
        int num2 = 3 , num3 = 3;
        num3 *= num2++; // num3 = num3* num2++ 因为++在后面,所以先运算再进行++操作
        System.out.println("num2= " + num2); // num2= 4
        System.out.println("num3= " + num3); // num3= 9

        // 练习3
        int num4 = 10;
        num4 += (num4++) + (++num4); // num4 = num4 + (num4++) + (++num4) = 10 + 10 + 12 
        System.out.println(num4); // 32

    }
}

比较运算符

比较运算符的结果是布尔型的,也就是要么是true,要么是false。

比较运算符 “==” 不要误写成“=”

运算符运算范例结果
==相等于4==3false
!=不等于4!=3true
<小于4<3flase
>大于4>3true
<=小于等于4<=3false
>=大于等于4>=3true
instanceof检查是否是类的对象“Hello” instanceof Stringtrue
class CompareTest {
    public static void main(String[] args) {
        int a = 3;
        int b = 4;

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

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

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

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

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

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

        // instanceof
        System.out.println("Hello" instanceof String);

    }
}

逻辑运算符

aba&ba&&ba|ba||b!aa^b
truetruetruetruetruetruefalsefalse
truefalsefalsefalsetruetruefalsetrue
falsetruefalsefalsetruetruetruetrue
falsefalsefalsefalsefalsefalsetruefalse
  • &-逻辑与

    两边都为true,则返回true;反之返回false

  • && -短路与

    左边为true再判断右边是否为true,左边为false则直接返回false

  • |-逻辑或

    两边有一边为true,则返回true;反之返回false

  • ||-短路或

    左边为true则直接返回true,左边为false再判断右边是否为true

  • !-逻辑非

    逻辑为true则返回false,逻辑为false则返回true

  • ^-逻辑异或

    两边逻辑不同则返回true,反之返回false

class LogicTest {
    public static void main(String[] args) {
        boolean b1 = true;
        boolean b2 = false;
        // &
        System.out.println("-----&-----");
        System.out.println(b1 & b1);
        System.out.println(b1 & b2);
        System.out.println(b2 & b1);
        System.out.println(b2 & b2);

        // &&
        System.out.println("-----&&-----");
        System.out.println(b1 && b1);
        System.out.println(b1 && b2);
        System.out.println(b2 && b1);
        System.out.println(b2 && b2);

        // |
        System.out.println("-----|-----");
        System.out.println(b1 | b1);
        System.out.println(b1 | b2);
        System.out.println(b2 | b1);
        System.out.println(b2 | b2);

        // ||
        System.out.println("-----||-----");
        System.out.println(b1 || b1);
        System.out.println(b1 || b2);
        System.out.println(b2 || b1);
        System.out.println(b2 || b2);

        // !
        System.out.println("-----!-----");
        System.out.println(!b1);
        System.out.println(!b2);

        // ^
        System.out.println("-----^-----");
        System.out.println(b1 ^ b1);
        System.out.println(b1 ^ b2);
        System.out.println(b2 ^ b1);
        System.out.println(b2 ^ b2);


        // &&
        int num1 = 10;
        if (b1 && (num1++ > 0)){
            System.out.println("num1: " + num1); // 11
        }else{
            System.out.println("num2: " + num1);
        }

        num1 = 10;
        if (b2 && (num1++ > 0)){
            System.out.println("num1: " + num1);
        }else{
            System.out.println("num2: " + num1); // 10
        }

        // ||
        num1 = 10;
        if (b1 || (num1++ > 0)){
            System.out.println("num1: " + num1); // 10
        }else{
            System.out.println("num2: " + num1); 
        }

        num1 = 10;
        if (b2 || (num1++ > 0)){
            System.out.println("num1: " + num1); // 11
        }else{
            System.out.println("num2: " + num1); 
        }

        // 练习1
        int x = 1 , y = 1;
        if(x++ == 2 &  ++y == 2){
            x = 7;
        }
        System.out.println("x= "+x+",y= "+y); //x= 2,y= 2


        x = 1;
        y = 1;
        if(x++ == 2 &&  ++y == 2){
            x = 7;
        }
        System.out.println("x= "+x+",y= "+y); //x= 2,y= 1


        x = 1;
        y = 1;
        if(x++ == 1 & ++y == 1){
            x = 7;
        }
        System.out.println("x= "+x+",y= "+y); //x= 2,y= 2


        x = 1;
        y = 1;
        if(x++ == 1 && ++y == 1){
            x = 7;
        }
        System.out.println("x= "+x+",y= "+y);//x= 2,y= 2 

        x = 1;
        y = 1;
        if(x++ == 1 && ++y == 2){
            x = 7;
        }
        System.out.println("x= "+x+",y= "+y);//x= 7,y= 2 


        // 练习2
        boolean bx = true;
        boolean by = false;
        short z = 42;
        if((z++ == 42) && (by = true)) z++;
        if((bx = false) || (++z == 45)) z++;
        
        System.out.println("z= " + z); //46
    }
}

位运算符

位运算符是对二进制位进行的操作。

运算符运算范例结果
<<左移3<<212
>>右移3>>11
>>>无符号右移3>>>11
&与运算6&32
|或运算6|37
^异或运算6^35
~取反运算~6-7
class BitTest {
    public static void main(String[] args) {

        /* <<  左移一位,相当于 *2
           3 ==> 0000 0011    先把十进制数转换为二进制   底层是8位一组,所以这里也用8位展示
           3<<2 ==> 0000 1100 把二进制下的有效位右移2位
           0000 1100 ==> 12   把右移后的二进制转换为十进制数      
        */
        System.out.println("3<<2: " + (3<<2));

        //  负数左移也相当于 左移一位 *2
        System.out.println("-3<<2: " + (-3<<2));

        /* >>  右移一位,相当于 /2
           3 ==> 0000 0011   
           3>>1 ==> 0000 0001          (右移时,因为是正数,所以最高位补0)
           0001 ==> 1 
        */ 
        System.out.println("3>>1: " + (3>>1));

        /*但是负数右移就要注意了
          首先怎么用二进制表示-3呢
          -3的二进制原码    1000 0011 (最高位的1,表示是-号)
          -3的二进制反码    1111 1100
          -3的二进制补码    1111 1101  (负数的补码为其数值位部分取反加一)
          右移一位后的补码  1111 1110  (右移后,因为是负数,所以最高位补1)
          右移一位后的反码  1111 1101
          右移一位后的原码  1000 0010
          1000 0010 ==> -2
        */
        System.out.println("-3>>1: " + (-3>>1));
    
        // >>>  正数的情况下和 >> 结果一致 
        System.out.println("3>>>1: " + (3>>>1));

        /* 
          负数的情况下是
          原码:1111 1111 1111 1111 1111 1111 1111 0011
          反码:1111 1111 1111 1111 1111 1111 1111 1100
          补码:1111 1111 1111 1111 1111 1111 1111 1101
          右移:1111 1111 1111 1111 1111 1111 1111 1110 ==> 2147483646
        */
        System.out.println("-3>>>1: " + (-3>>>1));

        /*& 按位与   同一位上,都是1,才是1
            6 ==> 0000 0110
            3 ==> 0000 0011
            & ==> 0000 0010 ==> 2
        */
        System.out.println("6&3: " + (6&3));

        /*| 按位或   同一位上,有一个是1,就是1
            6 ==> 0000 0110
            3 ==> 0000 0011
            | ==> 0000 0111 ==> 7
        */
        System.out.println("6|3: " + (6|3));

        /*^ 按位异或  同一位上,不同则为1
            6 ==> 0000 0110
            3 ==> 0000 0011
            ^ ==> 0000 0101 ==> 5
        */
        System.out.println("6^3: " + (6^3));

        /*~ 取反 1为0,0为1
            6 ==> 0000 0110
            ~ ==> 0000 1001 ==> 7
        */
        System.out.println("~6: " + (~6));
    }
}

三元运算符

(条件表达式)? 表达式1 : 表达式2
说明:
当条件表达式为true时,执行表达式1;
当条件表达式为false时,执行表达式2.
class SanYuanTest {
    public static void main(String[] args) {
        int a = 10;
        int b = 12;
        int max = (a>b) ? a : b;
        System.out.println(max);
    }
}

注意点:表达式1和表达式2的返回值应当可以被隐式转换为接收结果的变量的类型。

而且三元运算符可以无限嵌套。

class SanYuanTest {
    public static void main(String[] args) {
        int a = 10;
        int b = 12;

        String maxStr = (a > b) ? "a大" : ((a == b) ? "a和b相等" : "b大");
        System.out.println(maxStr);
    }
}

运算符优先级

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寒 暄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值