0
点赞
收藏
分享

微信扫一扫

Java基础3

拾杨梅记 2022-04-20 阅读 21
java

运算符

运算符指明对操作数的运算方式。运算符按照其要求的操作数数目来分,可以有单目运算符、双目运算符和三目运算符,它们分别对应于1个、2个、3个操作数。运算符按其功能来分,有算术运算符、赋值运算符、关系运算符、逻辑运算符、位运算符和其他运算符。

算术运算符

单目:~(按位取反)、! (取非)、-(负号运算符)、 ++(自增)、 - -(自减)、

双目:+ - * / %(取余)

三目(也称为条件运算符):a>b?true:false 说明:当a大于b的时候,为true(也就是冒号之前的值),否则为false;这整个运算符包括一个关系运算符(可以是">""<""!="等等),一个"?",一个":",冒号前后需要有两个表达式或者是值或者是对象。

  /*算术运算符:+ - * / % ++ --
        * +:加法运算   连接字符串 两个功能
        * -:减法运算
        * *:乘法运算
        * /:除法运算
        * %:取余数
        * ++:自增运算
        * --:自减运算*/
        int a = 10;
        int b = 5;
        String s1 = "xyz";
        String s2 = "opq";
        System.out.println(a+b);
        System.out.println(a+'a');
        System.out.println(25+s1);
        System.out.println(s1+s2);
        int c = 5;
        int c1 = c++;
        System.out.println(c1);//c++ 先进行运算 后进行自增
        System.out.println(c);
        int c2 = ++c;
        System.out.println(c2);//++c 先进行自增 后进行运算
       /* 运行结果:
        15
        107
        25xyz
        xyzopq
        5
        6
        7*/
        
/*
        * 条件运算符
        * (条件表达式)?表达式1:表达式2;
        * 当条件表达式结果为true时,执行表达式1,当条件表达式结果为false时,执行表达式2
        */
        int x= 85;
        String result=(x>60)?"及格":"不及格";//使用条件运算符时,输出结果必须是相匹配的数据类型
        System.out.println(result);
        /*运行结果:
        *及格 */
​

赋值运算符

= += -= *= /= %=

 /*
        * 赋值运算符: == += -= *= /= %=
        * =: 赋值运算符 与 == 关系运算符区分
        * +=: a += b--->a = a+b
        * -=: a -= b--->a = a-b
        * *=: a *= b--->a = a*b
        * /=: a /= b--->a = a/b
        * %=: a %= b--->a = a%b
        */
        int a = 10;
        int b = 25;
        int c = a += b;
        int d = a -= 9;
        int e = b *= 2;
        int f = b /= 5;
        int g = b %= 3;
        System.out.println(c);
        System.out.println(d);
        System.out.println(e);
        System.out.println(f);
        System.out.println(g);
        /*运行结果:
        * 35
          26
          50
          10
          1*/
          
        short s = 4;
        //s=s+2;报错原因 s为short类型 2为int类型,需要强制转换
        s+=2;//s = s+2 +=符号有隐式转换
        System.out.println(s);
        /*运行结果:
        * 6*/

关系运算符

等于符号:==,不等于符号:!= ,大于符号:>, 小于符号:<,大于等于符号:= ,小于等于符号:<= 。

 /*
        * 关系运算符 == != > < >= <=
        * == != 数值与数值, 数值与字符,字符串与字符串,逻辑值与逻辑值
        * > < >= <= 数值与数值,数值与字符*/
        int m = 10;
        int n = 5;
        char x = 'a';
        String y ="abc";
        String z = "def";
        System.out.println(m==n);
        System.out.println(m!=n);
        System.out.println(m>x);
        System.out.println(y==z);
        System.out.println(y!=z);
        /*运行结果:
        * false
          true
          false
          false
          true
        */
    

逻辑运算符

与(&)、非(~)、或(|)、异或(^)

&:双目运算符,运算时均把运算数转换为二进制再做比较,规则:当相同的位上均为1时结果为1,否则结 果为0.如:1010&1101,转为二进制:1111110010&10001001101,比较结果为:1000000转为十进制: 64。所以1010&1101=64;

| :当两边操作数的位有一边为1时,结果为1,否则为0。如1100|1010=1110

~:0变1,1变0

^:两边的位不同时,结果为1,否则为0.如1100^1010=0110

短路与(&&)、短路或(||)、非(!)

&&:与位运算符&用法相同,只是&在运算时,运算符两边的表达式首先被执行,然后再对两表达式中得到的结果进行与运算,而&&在运算时,如果从左边表达式中得到的操作数能确定运算结果,就不再对右边的表达式进行运算。

||:与位运算符|用法相同,只是&在运算时,运算符两边的表达式首先被执行,然后再对两表达式中得到的结果进行与运算,而||在运算时,如果从左边表达式中得到的操作数能确定运算结果,就不再对右边的表达式进行运算。

采用&&和||的目的是加快运算速度。

/*逻辑运算符:& | ! && || ^
        * &与运算 同真为真
        * |或运算 有真为真
        * !非运算 取反
        * &&短路与 A&&B 当A为假时,不执行B,结果为false 当A为真时,执行B,A,B同为真时,结果为true
        * ||短路或 A||B 当A为真时,不执行B,结果为true 当A为假时,执行B,若B为真,则结果为true,A,B同为假时,结果为false
        * ^逻辑异或*/
       int a = 10;
       int b = 5;
       int c = 25;
        System.out.println(a>b&b<c);//true & true 结果为 true
        System.out.println(a>b&b==c);// ture & false 结果为 false
        System.out.println(a>b&++b>c);//A&B A B都执行 b自增1 b此时为6
        System.out.println(b);
        System.out.println(a>c&&++b<c);//A&&B A执行 B不执行 此时b输出结果仍为6
        System.out.println(b);
        System.out.println(a>b||++b>c);//A||B 当A为true B不执行 b不自增 b仍为6 输出结果为true
        System.out.println(b);

其他运算符

instanceof

该运算符是双目运算符,左面的操作元是一个对象,右面是一个类或接口。当左面的对象是右面的类(或右边类的子孙类)创建的对象、或者是右边接口的实现类(或实现类的子孙类)的对象时,该运算符运算结果是true,否则是false。

位运算

<< 带符号左移 >>带符号右移 >>> 无符号右移

/*位运算
        * <<:左移
        * >>:右移
        * >>>:无符号右移
        * &:与运算 全1出1
        * |:或运算 有1出1
        * ^:异或运算 相同为0 相反为1
        * ~:取反运算 1变0 0变1
        */
        byte m = 5;
        byte n = 4;
​
        /*
        * 0000 0101 5
        * 0000 0100 4*/
        System.out.println(m<<1);//m 左移 0000 1010 10
        System.out.println(m>>1);//m 右移 0000 0010 2
        System.out.println(m>>>1);//m 无符号右移 0000 0010 2
        System.out.println(m&n);//结果为4
        /*
        * 0000 0101 5
        * 0000 0100 4
        * 0000 0100 4  全1出1*/
        System.out.println(m|n);//结果为5
        /*
        * 0000 0101 5
        * 0000 0100 4
        * 0000 0101 5  有1出1*/
        System.out.println(m^n);//结果为1
        /*
        * 0000 0101 5
        * 0000 0100 4
        * 0000 0001 1   相同为0 相反为1*/
​
        //当只有两个变量时,要求交换两变量的值
        int p = 12;
        int q = 8;
        p = p^q;
        q = p^q;
        p = p^q;
        System.out.println("p = "+p);//p=8
        System.out.println("q = "+q);//q=12
​
        System.out.println(~m);//结果为-6
        /*
        * 0000 0101 5
        * 1111 1010 -6 0变1 1变0*/
举报

相关推荐

0 条评论