内容:了解并掌握运算符
1.运算符
是计算机的最基本用途之一就是执行数学运算,例如
例如这里的+号就是运算符,即对操作数进行操作时的符号,不同的运算符操作时候的含义也不同。
在JAVA里也提供了运算符来操纵变量
当变量和运算符结合后就会形成表达式
2.算术运算符
1.基本四则运算符:加减乘除模(+ - * / %)
模运算相当于数学中除法的余数
在这里我们要注意几个点
对于这里的运算我们要进行一下小小的说明——他们输出的结果
第一种是两个操作数都是int类型所以输出的结果也是int类型会舍去小数部分
第二种与第三种将两边的某一个操作数进行转换编译器会进行类型提升后运算所以结果都是2.5
第三种是先进行运算得到舍去小数部分的2然后进行类型转换变成小数的2.0
这里的答案是怎么得出来的呢?我们来看
这里是进行了这样的运算
在JAVA 中允许进行小数取模运算:%不仅可以对整数取模,也可以对double类型取模但是没有意义一般都是对整形取模
两侧操作数类型不一致时,向类型大的提升。
1.增量运算符:(+= -= *= /= )
该种类型运算符操作完成后,会将操作完成的结果赋值给左操作数。
这里我们思考一下为什么会出现增量运算符呢?不是a=a+2更直观吗?那么我们来看
这里sh = sh+2进行了报错是因为2 是int类型而sh是short类型的所以进行了报错,下面的sh +=2相当于是编译器为我们进行了强制类型转换所以不会报错 。
注意:只有变量才能使用此运算符,常量不可以
2.自增/自减运算符(++ --)
++是给变量的值+1,--是给变量的值-1
前置减减 和 后置减减 与上面图中 前置加加 和 后置加加 同理
注意:
如果单独使用前置 后置没有任何区别。
如果混合使用前置++先+1,然后使用变量+1后的值 后置++先使用 变量原来的值,表达式结束后给变量+1
只有变量才能使用自增/自减运算符,常量不能使用,因为常量不允许修改。
3.关系运算符
关系运算符主要有六个:== != < > <= >= ,其计算结果是true或者false。
注意:当需要多次判断的时候,不能连着写,比如1 < a < 5,JAVA程序与数学中是有区别的
3.逻辑运算符(重点)
逻辑运算符主要有三个:(&& | | ! ) 运算结果都是boolean类型
1.逻辑与&&
语法规则:表达式1&&表达式2,左右表达式必须是boolean类型的结果
特点:如果表达式1为真那么就去执行表达式2,如果表达式2也为真,那么整体就为真 ,如果表达式1为假那么就不会执行表达式2了
这里我们会有一个新的概念那么当表达式2 是会报错的的我们表达式1是假的话就不会执行表达式2,进行了短路。
注意:两个表达式都为真,结果才是真,只要有一个是假结果就为假
2.逻辑与 | |
语法规则:表达式1 | | 表达式2,左右表达式必须都是boolean类型的结果。
注意:左右表达式至少有一个为真,则结果为真。
3.逻辑非 !
语法规则:!表达式
真变假,假变真。
4.短路求值
&& 和 | | 遵守短路求值的规则。
我们都知道,计算10/ 0会导致程序抛出异常,但是上面的代码却能正常运行,说明10/0没有被真正求值。
注意:
对于&&,如果左侧的表达式为 false,则表达式的结果一定是false,无需计算右侧的表达式。
对于| |,如果左侧的表达式为true,则表达式的结果一定是true,无需计算右侧的表达式。
&和 | 如果表达式结果为boolean类型时,也表示逻辑运算,但与&&和 | | 相比,他们不支持短路求值。
5.位运算符
位运算符主要有四个:& | ~ ^ 除 ~ 是一元运算符外,其余都是二元运算符。
位操作表示按二进制位运算,计算机中都是使用二进制来表示数据的(01构成的序列),按位运算就是按照二进制位的每一位依次进行计算。
1.按位与&:如果两个二进制位都是1,则结果为1其余为0。对应位有0 就是0.
2.按位或 | :如果两个二进制位都是0,则结果为0,否则为1.对应位有1 就是1.
3.按位异或^:如果两个数字的二进制位相同,则结果为0,相异结果为1. 不同就为1 一样就为0。
4.按位取反~:如果该位为0则取1,如果该位为1则取0.
注意
0x前缀的数字为16进制的数字,16进制可以看成是二进制的简化表示方式。一个16进制数字对应4个二进制位。
0xf表示十进制的15,也就是二进制的1111
print能够格式化输出内容,%x表示按照16进制输出。
\n表示换行符
6.移位运算符
这里我们进行了解就可以了
移位运算符有三个:<< >> >>>都是二元运算符,且都是按照二进制比特位进行运算的。
1.左移<<:最左侧位不要了,最右侧补0.
2.右移>>: 最右侧不要了了,最左侧补符号位(正数补0,负数补1)
3.无符号右移>>>:最右侧不要了,最左侧补0.
注意:
1.左移一位,相当于原数字 * 2,左移N位相当于原数字 * N次方
2.右移一位,相当于原数字 / 2,右移N位相当于原数字 / N次方
3.由于计算机计算移位效率高于计算乘除,当某个代码正好乘除2的N 次方的时候可以用移位符运算代替运算。
4.移动负数位或者移位位数过大都没有意义。
没有无符号左移!
7.条件运算符
条件运算符只有一个
表达式1?表达式2:表达式3
什么意思呢?
——意思是先执行表达式1,表达式1的结果为true,整个表达式的值是表达式2的值。表达式的结果为false,整个表达式的值是表达式3的值。