运算符:用来指明对于操作数的运算方式
-
按照操作数的数目来进行分类
单目 a++ (a>b) ? x : y
双目a+b
三目(a>b) ? x : y -
按照运算符的功能来进行分类
1.算术运算
加(+) 减(-)乘(*) 除(/) 取余或取模(%)自增(++) 自减(–)
int x = 1;
x = x + 1; //x空间内的值自己增加了一个
x ++; //x空间的值自增了一个
++ x; //对于x空间内的值来讲都是一致的,最终的结果都自增了一个
int x = 1
int y = x ++; //++在后,先赋值,后自增(在计算机底层先进行计算,后赋值)
x ++;// x =x + 1; //将x变量空间的内容先取出,常量区取出1,进行计算,再次存回x空间
x想要做值交换的时候,会产生一个临时的副本空间(备份)
++在变量的前面,先自增后备份 ++在变量的后面,先备份后自增
会将副本空间内的值赋给别人
x == ? 2 y == ? 1
int a = 1;
a = a ++;
a == ? 2
int m = 1;
int n = 2;
int sum = m++ + ++n - n-- - --m + n-- - --m;
m == 0 ,n == 1 , sum == ?,2
2.赋值运算
赋值运算存入等号左边的变量空间内
= 赋值符号 将=右边的内容
+= -= *= /= %=
int x = 1;
x ++;//x自增了一个,需求让x增加10个,for循环结构
byte x = 1; //1常量32bit,‘=’自动转化
x += 2; // x+2中,+自动类型提升,3 ‘=’自动转化
-------------------------------------------------------------------------------
byte x = 1;
x = x + 2; //出现编译错误,类型从int转化成byte可能有损失(可以理解为“+”具有自动类型提升的功能)
x变量空间的值取出,从常量区取过来2,加法运算,结果重新存回x变量空间内
x空间---->1 8bit
常量区—>2 32bit
00000001 + 00000000 00000000 00000000 00000010
'+’自动类型提升 8bit---->32bit
00000000 00000000 00000000 00000001
00000000 00000000 00000000 00000010
--------------------------------------------------------------
00000000 00000000 00000000 000000113
3.关系运算(比较)
(>) ( >=) (< ) ( <=) ( !=) (==) (对象 instanceof 类–>判断对象是否属于某个类)
4、逻辑运算
& 逻辑与 | 逻辑或 ^ 逻辑异或 !逻辑非
&&短路与 ||短路或
逻辑运算符前后连接的应该是两个boolean结果
&(逻辑与) 可以理解为中文的“和”,“并且”,意思,&前后两个条件必须同时满足,最终才为true
| (逻辑或) 可以理解为中文的“或者”,| 前后两个条件只要有一个满足,最终就为true
^(逻辑异或) 前后两个表达式只要结果不相同,最终的结果就为true
!(逻辑非) 可以理解为中文的“不”,将原来的结果取反
&&(短路与)
(3>4) && (3>2) = ?
false && true=false
1、短路 什么情况下才会发生短路? 当前的值结果为false的时候会发生短路
2、短路 到底短路的是什么?短路的是&&之后所有的计算的过程
3、如果发生了短路情况,性能比&稍微好一点
4、&逻辑与和&&短路与,从执行的最终结果来看没有什么区别
5、短路与不一定提高了性能,只有当前面为false的时候才会发生短路,才能提高性能
|| 短路或
(3>1) || (3>4) = ?
true ||()= true
或两个条件有一个满足,如果当第一个条件为true,最终结果肯定为true
5.位(bit)运算
& (按位与 ) |(按位或) ^(按位异或) ~(按位取反)
<<(按位左位移) >> (按位右位移 ) >>>(按位右位移(无符号))
如:
3 & 5 = ?—>1
1、将3和5转化成二进制表示形式
2、竖着按照对应位置进行& | ^ 计算
3、将计算后的二进制结果转化为十进制00000011
00000101
---------------
00000001------>1~6(非6) = -7
知识补充
原码 反码 补码 二进制表示数字
原码:
00000000 00000000 00000000 00000110(对应十进制6)
10000000 00000000 00000000 00000110(对应十进制-6)
上面原码对应的反码:
00000000 00000000 00000000 00000110
11111111 11111111 11111111 11111001 符号位不动,其余取反
上面原码对应的补码:
00000000 00000000 00000000 00000110
11111111 11111111 11111111 11111010 反码+1
计算机中不管是正数还是负数,存储的形式都是以补码的形式来存储
注意:反码是一种形式,取反是一个计算过程(每一个位置都取反)
6 << 1 = 12
00000000 00000000 00000000 00000110
0000000 00000000 00000000 000001100---->12
相当于乘以2的位移的次幂
6 >> 1 = 3
00000000 00000000 00000000 00000110
000000000 00000000 00000000 0000011----->3
相当于除以2的位移的次幂
-6 >> 1
11111111 11111111 11111111 11111010
?11111111 11111111 11111111 1111101
如果保留符号位置1,填1
如果不保留符号,不管是什么 都填0