Java的运算符

1.什么是运算符

计算机的最基本用途之一就是执行数学运算,比如:

		int a = 10;
		int b = 20;
		a + b;
		a < b;

上述的+和<就是运算符,即:对操作数进行操作时的符号,不同运算符操作的含义不同。
作为一门计算机语言,Java也提供了一套丰富的运算符来操纵变量。Java中运算符可分为以下:算术运算符(+ - */)、关系运算符(< > ==)、逻辑运算符、位运算符、移位运算符以及条件运算符等。

2.算数运算符

2.1基本四则运算符:加减乘除模(+ - * / %)

        int a = 20;
        int b = 10;

        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(模运算相当于数学中除法的余数)

注意:
1.都是二元运算符,使时必须要有左右两个操作数
2.int/int结果还是int类型,而且会向下取整
3.做除法和取模时,右操作数不能为零
4.%不仅可以对整型取模,也可以对double类型取模,但没有意义,一般都是对整型取模的
5.两侧操作类型不一致时,向类型大的提升

2.2增量运算符(+=,-=,*=,/=,%=)

该种类型运算符操作完成后,会将操纵的结果赋值给左操作数。

        int a = 1;
        a+=2;   //相当于a=a+2
        System.out.println(a);  //输出3
        
        a-=1;   //相当于a=a-1
        System.out.println(a);  //输出2
        
        a*=3;   //相当于a=a*3
        System.out.println(a);  //输出6
        
        a/=3;   //相当于a=a/3
        System.out.println(a);  //输出2
        
        a%=3;   //a=a%2
        System.out.println(a);  //输出2

注意:只有变量才能使用运算符,常量不能使用。

2.3自增/自减运算符(++,- -)

++是给变量的值+1,- -是给变量的值-1。

       int a = 1;
       a++;    //后置++,表示给a的值+1,此时a的值为2
       System.out.println(a++);    //注意:后置++是先使用变量原来的值,表示式结束时给变量+1,因此输出2
       System.out.println(a);  //输出3
       
       ++a;    //前置++,表示给a的值+1
       System.out.println(++a);    //注意:前置++是先给变量的值+1,然后使用变量中的值,因此输出5
       System.out.println(a);  //输出5 

注意:
如果单独使用,【前置++】和【后置++】没有任何区别
如果混合使用,【前置++】先+1,然后使用变量+1之后的值,【后置++】先使用变量原来的值,表达式结束时给变量+1
只有变量才能使用自增/自减运算符,常量不能使用,因为常量不允许被修改

3.关系运算符(==,!=,<,>,<=,>=)

其计算结果是ture或false

        int a = 10;
        int b = 20;
        //注意:在Java中=表示赋值
        //在Java中==表示相等
        System.out.println(a == b); //false
        System.out.println(a != b); //ture
        System.out.println(a < b);  //ture
        System.out.println(a > b);  //false
        System.out.println(a <= b); //ture
        System.out.println(a >= b); //false

注意:当需要多次判断时不能连着写。比如:3<a<5,java的程序与数学是有区别的

4.逻辑运算符(&&,||,!)

运算结果都是boolean类型

4.1逻辑与&&

语法规则:表达式1&&表达式2,左右表达式必须是boolean类型的结果。相当于且。
同真则真,一假则假

        int a = 1;
        int b = 2;

        System.out.println(a == 1 && b == 2);   //左真但右真,结果为真
        System.out.println(a == 1 && b > 100);  //左真但右假,结果为假
        System.out.println(a > 100 && b == 2);  //左假但右真,结果为假
        System.out.println(a > 100 && b > 100); //左假且右假,结果为假

4.2逻辑或||

语法规则:表达式1||表式2,左右表达式必须是boolean类型的结果。相当于或。
一真则真

        int a = 1;
        int b = 2;

        System.out.println(a == 1 || b == 2);   //左真但右真,结果为真
        System.out.println(a == 1 || b > 100);  //左真但右假,结果为真
        System.out.println(a > 100 || b == 2);  //左假但右真,结果为真
        System.out.println(a > 100 || b > 100); //左假但右假,结果为假

4.3逻辑非!

语法规则:!表达式
真变假,假变真

        int a = 1;
        System.out.println(!(a == 1));  //a == 1为ture,取非为false
        System.out.println(!(a != 1));  //a != 1为false,取非就是ture

4.4短路求值

==&&||遵循短路求值规则==
        System.out.println(10 > 20 && 10/0 == 0);   //打印false
        System.out.println(10 < 20 || 10/0 == 0);   //打印true

我们都知道, 计算10/0会导致程序抛出异常. 但是上面的代码却能正常运行,== 说明10/0并没有真正被求值==.
注意:
对于 && , 如果左侧表达式值为 false, 则表达式结果一定是 false, 无需计算右侧表达式.
对于 ||, 如果左侧表达式值为 true, 则表达式结果一定是 true, 无需计算右侧表达式.
& 和 | 如果表达式结果为 boolean 时, 也表示逻辑运算. 但与 && || 相比, 它们不支持短路求值.

        System.out.println(10 > 20 & 10/0 == 0);   //程序抛出错误
       System.out.println(10 < 20 | 10/0 == 0);   //程序抛出错误

5.位运算符

位运算符主要有四个:& |^,除是一元运算符外,其余都是二元运算符。位操作表示按二进制位运算. 计算机中都是使用二进制来表示数据的(01构成的序列), 按位运算就是在按照二进制位的每一位依次进行计算.

5.1按位与&

如果两个二进制位都是1,则结果为1,否则结果为0.

        int a = 10;
       int b = 20;
       System.out.println(a & b);  //结果为0

进行按位运算,需要先把10和20转成二进制,分别为1010和10100

5.2按位或 |

如果两个二进制位都是0,则结果位0,否则结果位1.

        int a = 10;
        int b = 20;
        System.out.println(a | b);  //结果为30

运算方式和按位与类似

5.3按位取反 ~

如果该位为0,则转为1,如果该位位1,则转为0.

        int a = 0xf;
        System.out.printf("%x\n",~a);

注意:
1.0x 前缀的数字为十六进制数字.十六进制可以看成是二进制的简化表示方式.一个十六进制数字对应 4个二进制位.
2.0xf 表示 10 进制的 15, 也就是二进制的 1111
3.printf 能够格式化输出内容, %x 表示按照十六进制输出.
4.\n 表示换行符

5.4按位异或 ^

如果两个数字的二进制位相同,则结果位0,相异则结果为1.

        int a = 0x1;
        int b = 0x2;
        System.out.printf("%x\n",a^b);

6.位移运算(简单了解)

6.1左移 <<:

最左侧位不要了,左右侧补0

6.2右移 >>:

最右侧位不要了,最左侧补符号位(正数补0,负数补1)

6.3无符号右移 >>>:

最右侧位不要了,最左侧补0

7.条件运算符

表达式1?表达式2:表达式3
Java中唯一的三目运算符
当表达式1的值为 true 时, 整个表达式的值为表达式2的值;
当表达式1的值为 false 时, 整个表达式的值为表达式3的值.
注意:

  1. 表达式2和表达式3的结果要是同类型的,除非能发生类型隐式类型转换.
  2. 表达式不能单独存在,其产生的结果必须要被使用。

8. 运算符的优先级

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值