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