2-运算符

目录

一.算术运算符

 1.2增量运算符 += -= *= %=

​编辑

1.3自增/自减运算符 ++/--

二.关系运算符

三.逻辑运算符

 3.1逻辑与&&

 3.2逻辑或||

 3.3逻辑非!

 3.4短路求值

四.位运算符

 4.1按位与&

 4.2按位或|

 4.3按位取反~

 4.4按位异或^

五.移位运算符

 5.1 左移<<

 5.2 右移>>

 5.3 无符号右移

六.条件运算符

七.运算符的优先级 


一.算术运算符

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

1.int/int型会向下取整

 2

2./和%的右操作数不能是0 

例如如果执行下面的代码

System.out.println(2/0);
System.out.println(2%0);

 编译器会显示出现算数异常

3.%不仅可以对整型取模,也可以对浮点型取模(但是没有意义)

 4.两侧操作数不一致时,会发生整型提升

 1.2增量运算符 += -= *= %=

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

 来看一段神奇的代码

 只有变量才能使用该运算符,常量不能使用

1.3自增/自减运算符 ++/--

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

 前置++和后置++的区别就在于前置++会先让变量自增1,然后返回变量的值,后置++会先返回变量的值,然后变量自增1

前置--和后置--的用法与++相似

只有变量才能使用++/--,常量不能使用

二.关系运算符

关系运算符主要有六个: == != < > <= >= ,其计算结果是 true 或者 false (boolean类型)

注意:当需要多次判断时,不能连着写,比如: 3 < a < 5
3<a会返回true或者false的布尔型常量,不能与int常量5进行关系判断

三.逻辑运算符

逻辑运算符主要有三个: &&  ||  ! ,运算结果都是 boolean类型

 3.1逻辑与&&

两个表达式都为真,结果才是真,只要有一个是假,结果就是假
表达式1表达式2结果

 3.2逻辑或||

表达式1 || 表达式 2 ,左右表达式必须是 boolean类型的结果
表达式1表达式2结果

 3.3逻辑非!

真变假,假变真
表达式结果

 3.4短路求值

&&和||会遵循短路求值的规则:

  1. 进行&&运算时,当第一个表达式的结果为假,第二个表达式不再进行运算,返回false
  2. 进行||运算时,当第一个表达式的结果为真,第二个表达式不再进行运算,返回true

 我们都知道, 计算 10 / 0 会导致程序抛出异常. 但是上面的代码却能正常运行, 说明 10 / 0 并没有真正被求值

同样可以进行逻辑与/逻辑或运算,&和|并不支持短路规则,其左右表达式都会参与运算

四.位运算符

位操作表示 按二进制位运算. 计算机中都是使用二进制来表示数据的(01构成的序列), 按位运算就是在按照二进制位 的每一位依次进行计算.

 4.1按位与&

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

 4.2按位或|

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

  •  &和|当左右操作数为逻辑表达式时,会进行逻辑运算;当左右操作数为整数时会进行按位运算。但是推荐将&和|当做位运算符使用

 4.3按位取反~

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

 4.4按位异或^

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

 可以得出两个简单的结论:

  1. n^n=0
  2. n^0=n

五.移位运算符

移位运算符有三个 : << >> >>> ,都是二元运算符,且都是按照二进制比特位来运算的

 5.1 左移<<

最左侧位不要了, 最右侧补 0
  •  向左移位时,丢弃的是符号位,因此正数左移可能会变成负数
  • 左移n位相当于*2的n次方

 5.2 右移>>

最右侧位不要了, 最左侧补符号位(正数补0, 负数补1)
  •  右移n位相当于/2的n次方

 5.3 无符号右移

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

  •  无符号右移可能会把负数变成正数
  • 没有无符号左移,因为左移操作符会直接在右侧补0
移动负数位或者移位位数过大都没有意义

六.条件运算符

条件运算符只有一个:
表达式1 ? 表达式2 : 表达式3
当 表达式1 的值为 true , 整个表达式的值为 表达式2 的值;
当 表达式1 的值为 false , 整个表达式的值为 表达式3 的值.
也是 Java 中唯一的一个 三目运算符, 是条件判断语句的简化写法.
例如
  • 表达式2和表达式3的结果必须是同类型的,除非能发生类型隐式类型转换

 

  •  表达式不能单独存在,其产生的结果必须要被使用

 

来看一个简单的练习

答案分别是false和true,你做对了吗

七.运算符的优先级 

在一条表达式中,各个运算符可以混合起来进行运算,但是运算符的优先级不同,比如: * / 的优先级要高于 + 和 - ,有些情况下稍不注意,可能就会造成很大的麻烦。

在上图中,由于+的优先级要高于>>,因此c=(a+b-a)>>1,得到的结果是10

  • 优先级 具体规则我们 不必记忆 . 在可能存在歧义的代码中加上括号即可

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

不 会敲代码

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

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

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

打赏作者

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

抵扣说明:

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

余额充值