Java——运算符

        在Java中,运算符可以分为以下几种:算术运算符(+ - * /)、关系运算符(< > ==)、逻辑运算符(&& || !)、位运算符(& | ~)、移位运算符(<< >> >>>)以及条件运算符。

算术运算符

 1.基本四则运算(+ - * /)

        int a = 20;
        int b = 10;
        int c = 0;
        System.out.println(a + b);//30
        System.out.println(a - b);//10
        System.out.println(a * b);//200
        System.out.println(a / b);//2
        System.out.println(a % b);//0
        System.out.println(a / 0);//当取模或者进行除法运算时,被操作数不能为0
        System.out.println(a % 0);//也能对小数进行取模运算,但是没有意义
        

2.增量运算符(+= -= *= /= %=)(只有变量才能用,常量不能用)

        int a = 1;
        a += 3;//相当于a = a + 3,即a = 1 + 3
        System.out.println(a);//4

        int b = 5;
        b -= 1;//相当于b = b - 1,即b = 5 - 1
        System.out.println(b);//4

        int c = 2;
        c *= 3;//相当于c = c * 3,即c = 2 * 3
        System.out.println(c);//6

        int d =10;
        d /= 5;//相当于d = d / 5,即d = 10 / 5
        System.out.println(d);//2

        int e = 11;
        e %= 2;//相当于e = e % 2,即e = 11 % 2
        System.out.println(e);//1

3.自增/自减运算符(只有变量才能用,常量不能用)

        ++ 是给变量+1,--是给变量-1

        int a = 5;
        System.out.println(a++);//5  后置++,先进行输出再进行++
        System.out.println(++a);//7  前置++,先进行++后进行输出

        前置++和后置++,在单独使用的时候没有区别;但是在混合使用时,后置++是先进行运算再进行++,而前置++是先进行++后进行运算。

关系运算符

        关系运算符主要有六种:==  !=  <  >  <=  >=,其计算结果是true或者false

注:

  • =为赋值符号,而==是关系运算符用来判断是否相等
  • 在Java中,当需要进行多次比较时,不能连着写,如1
        int a = 10;
        int b = 20;
        System.out.println(a == b);//false
        System.out.println(a != b);//true
        System.out.println(a <= b);//true
        System.out.println(a >= b);//false
        System.out.println(a < b);//true
        System.out.println(a > b);//false
        int c = 5;
        double d = 5.4;//int与double可以进行比较,都是数值型
        System.out.println(c == d);//false
        System.out.println(c <= d);//true
        char e = 'a';
        int n = 30;//char和int也可以进行比较,但是比较会把‘a’看成‘a’的编码进行比较
        System.out.println(e == n);//false

逻辑运算符 

        逻辑运算符有三个:&&  ||  !,返回值是true或者false

        &&(逻辑与)——表达式1&&表达式2,左右表达式都为真时结果才是真,其他情况都为假

        ||(逻辑或)——表达式1||表达式2,左右表达式只要有一个是真,结果就是真,都为假时结果才为假

        !(逻辑非)——!表达式,当表达式为真时,!表达式为假,当表达式为假时,!表达式为真

        int a = 1;
        int b = 2;
        System.out.println(a == 1 && b == 2);//true
        System.out.println(a > 1 && b == 2);//false
        System.out.println(a < 1 && b > 2);//false
        System.out.println(a == 1 || b == 2);//true
        System.out.println(a == 1 || b > 2);//true
        System.out.println(a < 1 || b < 2);//false
        System.out.println(!(a == 1));//false
        System.out.println(!(b != 2));//true

短路求值

        逻辑与和逻辑或的运算遵守短路求值的规则:

        System.out.println(10 == 10 || 10 / 0 == 0);//true
        System.out.println(10 > 20 && 10 / 0 == 0);//false

        按照标准来说10 / 0应该会出错,但是在该程序中并没有抛出异常,这是因为&&和||遵守短路求值的规则,对于&&来说,如果第一个表达式为假则不计算第二个表达式的真假,直接返回结果假;对于||来说,如果第一个表达式为真则不计算第二个表达式的真假,直接返回结果真。  

位运算符

        位运算符有四个:&  |  ~ ^,位运算符主要是按二进制运算。(0x——十六进制,0o——八进制,0b——二进制)

        &(按位与)——如果两个二进制位都是1,则结果为1,否则为0

        |(按位或)——如果两个二进制位都是0,则结果为0,否则为1

        ~(按位取反)——如果该位是0则转为1,如果该位是1则转为0

        ^(按位异或)——如果两个数字的二进制位相同,则结果为0,否则为1

        int a = 10;//0000 1010
        int b = 20;//0001 0100
        System.out.println(a & b);//0000 0000
        System.out.println(a | b);//0001 1110 = 30
        System.out.println(~a);//包括符号位按位取反  -11
        System.out.println(~b);//包括符号位按位取反  -21
        System.out.println(a ^ b);//0001 1110 = 30

移位运算符

        移位运算符有三个:<<  >>  >>>,移位运算符里没有<<<(无符号左移) 

        <<(左移)——最左侧位不要,最右侧补0

        >>(右移)——最右侧位不要,最左侧补符号位

        >>>(无符号右移)——最右侧不要了,最左侧补0

        int a = 10;
        System.out.println(a << 2);//0000 0000 0000 0000 0000 0000 0000 1010 -> 00 0000 0000 0000 0000 0000 0000 1010 00 = 40
        System.out.println(a >> 2);//0000 0000 0000 0000 0000 0000 0000 1010 -> 00 0000 0000 0000 0000 0000 0000 0010 10 = 2

        正整数左移1位相当于给原来的数乘2,即x << 1 = x * 2,左移n位,相当于给原来的数 乘2的n次方;正整数右移1位相当于原来的数除以2,即x >> 1 = x / 2,右移n位,相当于给原来的数除以2的n次方。

        所以在某些乘2或者除以2的问题上,可以直接使用移位运算符,左移或者右移1位!

条件运算符

        条件运算符时一个三目运算符且只有一个:表达式1 ? 表达式2 : 表达式3,当表达式1为true时,整个表达式的值为表达式2的值,当表达式1为false时,整个表达式的值为表达式3的值。

注:

  • 表达式2和表达式3要是同一种类型的,或者能发生隐式类型转换的,但是为了避免歧义,一般要求表达式2和表达式3的类型相同
  • 三目运算符不能单独出现,返回值必须被利用,要么赋值,要么输出
        int a = 10;
        int b = 20;
        a > b ? a : b;//会报错
        int max = a > b ? a : b;
        System.out.println(max);

运算优先级

        运算符之存在有优先级,但是一般在需要确定计算的顺序时,一般直接加()就好 。

举个例子:算术运算符的优先级高于移位运算符

        int a = 20;
        int b = 10;
        //结果为60 -> a + (a - b) = 30,30 << 1 = 60
        System.out.println(a + (a - b) << 1);
        //结果时40 -> (a - b) << 1 = 10 << 1 = 20,20 + 20 = 40
        System.out.println(a + ((a - b) << 1));

你可能感兴趣的:(JavaSE,java)