Java语言支持如下运算符:
算术运算符:+,-,*,/,%,++,--
赋值运算符:=
关系运算符:>,<,>=,<=,==,!=,instanceof
逻辑运算符:&&,||,!
位运算符:&,|,^,~,>>,<<,>>>> 了解即可
条件运算符:?,:
扩展赋值运算符:+=,-=,*=,/=
二元运算符
整数运算:
如果两个操作数有一个为long,则结果也为long,没有long时,结果为int。即使操作数全为shot,byte,结果也是int
浮点运算:
如果两个操作数有一个为double,则结果为double。
只有两个操作数都是float,则结果才为float。
取模运算
其操作数可以为浮点数,一般使用整数。如:5.9%3.9=2.0000000000000004
要点:
负数%负数=负数;System.out.println(-5.9%-3.9); //输出:-2.0000000000000004
负数%正数=负数;System.out.println(-5.9%3.9); //输出:-2.0000000000000004
正数%负数=正数;System.out.println(5.9%-3.9); //输出:2.0000000000000004
一元运算符(++,--)
int a=3;
int b=a++; //执行完后,b=3,a=4。先给b赋值,a再自增。
int c=++a;//执行完后,c=5,a=5。先自增,在给b赋值。
注意:Java中的乘幂处理:
int a=3^2; //Java中不能这么处理,^是异或符号。
double b=Math.pow(3,2);
Math类提供了很多科学和工程计算需要的方法和常数。
布尔逻辑表达符(必须是布尔值)
& | 位运算符
逻辑与:&&和&,逻辑或:||和|,逻辑非:!。(与,或、为二元运算符)
逻辑与和逻辑或采用短路ude方式。从左到右计算,如果确定值则不会在计算下去。
逻辑与只要有一个为false,则直接返回false。
逻辑或只要有一个为true,则直接返回true。
boolean c=1>2&&2>(3/0); //短路计算方式,因此2>(3/0)并没有运算。
“&”“|”不采用短路计算,就是说即使是前面判断完成,后面的判断依然运行!!!
System.out.println(true&true);
System.out.println(true&false);
System.out.println(false&false);
System.out.println(true|true);
System.out.println(true|false);
System.out.println(false|false);
输出结果:
true
false
false
true
true
false
!非 从右往左运算
例如:!!X=!(!X)
位运算符
~取反 &按位与 |按位或 ^按位异或
<<:左移运算符,>>:右移运算符,>>>>:无符号移位运算符。
右移一位相当于除2取商。
左移一位相当于乘2。
二进制比较&【与】只要有0就是0,同是1才是1
二进制比较| 【或】只要有1就是1,同是0才是0
二进制比较~ 【非】取反!取反!取反!自行脑补,0就是1,1就是0。
二进制比较^ 按位异或 相同得0 不同得1。
| 按位或:
参与运算的两数各对应的二进位相或.只要对应的二个二进位有一个为1时,结果位就为1
例如: 1|2 : 0001 | 0010 = 0011
9|5 : 1001 | 0101 = 1101 所以9|5=13
& 按位与:
参与运算的两数各对应的二进位相与.只有对应的两个二进位均为1时,结果位才为1,否则为0
例如: 1&2 : 0001 & 0010 = 0000
9&5 : 1001 & 0101 = 0001 所以9&5=1
^ 按位异或:
参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1
例如: 1^2 : 0001 ^ 0010 = 0011
9^5 : 1001 ^ 0101 = 1100 所以9^5=12
---------------------
作者:Super_Me_Jason
来源:CSDN
原文:https://blog.csdn.net/Super_Me_Jason/article/details/79707992
版权声明:本文为博主原创文章,转载请附上博文链接!
((先讲~【非】
注意了:取反是按位取反
int是32位 十进制20 二进制表示为0b0000_0000_0000_0000_0000_0000_0001_0100
取反后 二进制表示为0b1111_1111_1111_1111_1111_1111_1110_1011
结果为:-21
还有一个简单的方法0取反就是-1,所以20取反就是-21,999取反就是-1000
))
System.out.println(10&20); 输出:0
解析:10的二进制是1010
20的二进制是10100
运算过程:
01010
&--------
10100
结果:00000 转 十进制 0
System.out.println(10|20); 输出:30
解析:10的二进制是1010
20的二进制是10100
运算过程:
01010
|--------
10100
结果:11110 转 十进制 30
int a=3*2*2;
int b=3<<2; //相当于3*2*2
int c=12/2/2;
int d=12>>2; //相当于3/2/2
输出: a=12,b=12,c=3,d=3
位运算相关常识
扩展运算符
运算符 |
用法举例 |
等效的表达式 |
+= |
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 |
字符串连接符
“+”运算符两侧的操作数中只要有一个是字符串(String)类型,系统会自动将另一个操作数转换为字符串然后在进行连接。
int c=12;
System.out.println("c="+c); //输出c=12
字符串相连:加号两边只要有一个为字符串,则整个结果为字符串。
System.out.println(1+2+3+4+"5");输出:105
System.out.println("5"+1+2+3+4);输出:51234
三目条件运算符(又称三元运算符)
三木条件运算符,语法格式:
X?Y:Z
其中X为boolean类型表达式,先计算X的值,若为true,则整个三目运算的结果为表达式Y的值,否则整个运算结果为表达式Z的值。
例如:
int score=80;
int x=-100;
String type=score<60? "不及格":"及格";
运算符优先级的问题
|
. ( ) { } ; , |
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 |
= *= /= %= |
大家不要去刻意的记住它,表达式里面优先使用小括号来组织!