运算符

运算符

算数>关系>赋值

算数运算符 不会强转 整数int 小数 double

+:拼接字符串,两端一段为字符串则拼接,结果也为字符串  算数运算:数值
-
*
/
%   取模
8.2%3.2=1.799999999999999    
(float)8.2%(float)3.2=1.7999997    23位
++  
++在前先自增再用变量
++在后先用变量在自增
--

关系运算符 结果为Boolean值

>
<
<=
>=
==
!=

赋值运算符

=
+= -=*=/= 隐式转换 强制转换成前面的类型 常量窄化转换

逻辑运算符 !>&&>||

& 两者为真,结果为真 两边可以跟数字进行与运算
&& 短路:当满足条件时,不在执行后面
| 一者为真,结果为真 两边可以跟数字进行或运算
|| 两边只能跟Boolean值
^ 相同为假,不同为真 两边可以跟数字进行异或运算

三元位运算 ? :

结果以大类型为准
byte<short<int<long<float<double
常量窄化转换 根据常量大小选择相应取值范围的类型

位运算

&        相同为1,不同为0
|          一个为1,则为1
^        相同为0,不同为1  
<<     *2
>>     /2 带符号右移正数补0,负数补1
>>> 无符号右移补0
数字转补码
Integer.toBinaryString(8);(获取数字的补码)

优先级

算数>关系>赋值
!>&&>||

javap -verbose jvm指令 转回二进制 操作系统就可执行
队列:先进先出
方法运行时数据是存在栈里的:先进后出
栈计算:栈顶两数计算并合并

jvm指令:

iconst_4 将常量4入栈(icons 1~5)
bipush 8 将常量8推入栈
istore_1 将栈顶出栈到第一个变量空间
iload_1 将第一个变量入栈
iinc 1, 2 将第一个变量+2
imul 栈顶两个数相乘,结果合并
iadd 栈顶两个数相加,结果合并

计算-6+1
10000110 -6 8位原码
01111001 反码
01111010 补码 反码+1
01111011 运算-6+1
01111010 反码 反码-1
10000101 原码
计算6*1
先将常量6和1放入栈
在调用jvm乘法指令
通过指令调用操作系统cpu计算

posted @ 2022-06-22 20:09  chahune  阅读(31)  评论(0)    收藏  举报