013_运算符_算术
一、运算符的分类:
a)赋值运算符(=)
将右边的值赋给左边。如 int a =3;
b)算术运算符:(+,-,*,/,%,++,--)
算术运算符按照操作数是1个还是2个分为:
ba)一元运算符(++、--)
一元运算符测试案例:
package edu.aeon.test; public class Test { public static void main(String[] args) { int a = 3; int b = a++; //执行完后,b=3。先给b赋值,再自增。 System.out.println("a="+a+"\tb="+b); int c = ++a; //执行完后,c=5。先自增,再给b赋值 System.out.println("a="+a+"\tc="+c); } }
测试结果截图:
bb)二元运算符(+、-、*、/、%)
二元运算符类型提升问题:
在整数运算中、如果两个操作数有一个为long,则结果为long
没有long时,结果为int。即使操作数全为short,byte,结果也是int
在浮点运算中、如果两个操作数有一个为double,则结果为double.
只有两个操作数都是float, 则结果才为float.
在二元运算符中、我们重点关注下%(取余)、其操作数可以为浮点数,一般使用整数。如:5.9%3.9=2.000000004、这里我们有个取余的要点:
负数%负数=负数;
负数%正数=负数;
正数%负数=正数;
测试案例如下:
package edu.aeon.test; public class Test { public static void main(String[] args) { int a =-5%-3; System.out.println("a="+a); int b=-5%3; System.out.println("b="+b); int c=5%-3; System.out.println("c="+c); } }
测试结果截图:
c)逻辑运算符
ca)逻辑与(&&)
true&&true为true
false&&true为false
false &&false为false
cb)逻辑或(||)
true||true为true
true||false 为true
false||false为false
我们可以看出逻辑&&和逻辑或是用规律的、其规律为:在逻辑与(&&)中只要有一个false其结果为false、而在逻辑或(||)中有一个为true其结果为true、那么试想在逻辑与(&&)中第一个结果已经为false了我们还有必要计算第二个的结果吗?答案是没必要、因为第一个结果已经false了、你第二个值不管是true或false都对整个表达式的结果没有丝毫影响、所以为了提高效率、在java中逻辑(&&)和逻辑或(||)采用了短路的方式。从左到右计算,如果确定值则不会再计算下去。
例如:boolean c=1>2 && 2>(3/0);此处不会抛异常、说明没有执行3/0.
cc)逻辑非(!)
!true为false
!false为true
d)位运算符
da)取反~
db)按位与&
dc)按位或|
dd)按位异或^
de)左移运算符<< 左移一位相当于乘2。
df)右移运算符>> 右移一位相当于除2取商。
e)扩展运算符\
运算符 |
用法举例 |
等效的表达式 |
+= |
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 |
f)三目条件运算符
三目条件运算符,语法格式:x ? y : z 其中x为boolean类型表达式,先计算x的值,若为true,则整个三目运算的结果为表达式y的值,否则整个运算结果为表达式z的值。
举例:
1
2
3
4
5
|
int score = 80 ; int x = - 100 ; String type = score < 60 ? "不及格" : "及格" ; int flag = x > 0 ? 1 : (x == 0 ? 0 : - 1 ); System.out.println( "type= " + type); System.out.println( "flag= " + flag); |
最后我们来了解下运算符的优先级:
|
. ( ) { } ; , |
L to R |
* / % |
L to R |
+ - |
L to R |
<< >> >>> |
L to R |
< > <= >= instanceof |
L to R |
== != |
L to R |
& |
L to R |
^ |
L to R |
| |
L to R |
&& |
L to R |
|| |
R to L |
? : |
R to L |
= *= /= %= |