# 1.Java中运算符的种类
算术运算符、位运算符、赋值运算符、关系运算符、逻辑运算符、三目运算符、类型相关运算符
# 2.算术运算符
作用:执行基础的四则运算
+ - * / % ++ --
取余运算(模运算):
//模运算(取余运算)
int a = 10;
int b = 3;
System.out.println(a % b);
自增运算符:++
作用:操作一个变量(单目运算符),以步长为1,将运算数的值进行自增
i++:先用后加:①将变量中的值取出,进行打印或四则运算(用)②对变量进行步长为1的自增③将自增完毕量重新赋值给变量
++i:先加后用:①
对变量进行步长为1的自增②
将自增完毕量重新赋值给变量③
将变量中的值取出,进行打印或四则运算(用)
int i1 = 0;
System.out.println(i1++);
System.out.println(i1);
System.out.println("----------");
int i2 = 0;
System.out.println(++i2);
System.out.println(i2);
System.out.println("----------");
int i3 = 0;
int i4 = 0;
System.out.println(i3++ + ++i3); //2:0 + 2
System.out.println(++i4 + i4++); //2:1 + 1
System.out.println("----------");
System.out.println(i3); //2
System.out.println(i4); //2
# 3.位运算符
作用:操作
整数的2进制位
注意:Java的位运算符不适用于浮点值
(了解:)
二进制位的表示形式:
5:
0000 0000 0000 0000
0000 0000 0000 0101 --> 1*2^0 + 0*2^1 + 1*2^2 = 1 + 0 + 4 = 5
9:
0
000 0000 0000 0000
0000 0000 0000 1001
二进制整数的表示码制:
二进制表示整数统一使用
补码表示:
正整数:补码 == 源码
负整数:补码:去除正负位,得到绝对值位,将绝对值位:按位取反,末位加1
-5:
0
000 0000 0000 0000
0000 0000 0000 0101
取绝对值:1
(
000 0000 0000 0000
0000 0000 0000 0101)
按位取反:1(111 1111 1111 1111 1111 1111 1111 1010)
末尾加1:1
(111 1111 1111 1111 1111 1111 1111 1011)
-5:
1
111 1111 1111 1111 1111 1111 1111 1011
二进制位负数求绝对值:
①忽略符号位
②将绝对值位:末尾减1,再取反
1(
111 1111 1111 1111 1111 1111 1111 1011)
1(
111 1111 1111 1111 1111 1111 1111 1010)
1(000
0000 0000 0000 0000 0000 0000 0101)
&:与运算
作用:全1为1,有0全0
5:0000 0101
9:0000 1001
&:0000 0001 = 1
|:或运算
作用:有1为1,全0为0
5:0000 0101
9:0000 1001
|:0000 1101 = 13
~:取反运算(单目运算符)
作用:01互换
5:0000 0101
~:1111 1010 = -6
^:异或运算
作用:相同为0,不同为1
5:0000 0101
9:0000 1001
^:0000 1100 = 12
>>:右移运算
作用:将2进制位向右进行移动,最右边的2进制位溢出,空位在左侧,用符号位补齐
现象:
正整数向右位移1位,相当于除以1次2,右移运算不会改变运算数的符号
5:0000 0101
>> 2:0000 0001
<<:左移运算
作用:将2进制位向左进行位移,最左边的2进制位溢出,空位在右侧,用0补齐
现象:正整数向左位移1位,相当于乘以1次2,左移运算有可能改变运算数的正负
5:0000 0101
<< 2:0001 0100
>>>:无符号右移运算
作用:
将2进制位向右进行移动,
最右边的2进制位溢出,
空位在左侧,统一使用0补齐
现象:无符号右移得到的结果一定是正数
5:0000 0101
>>> 1:0000 0010
-5:1111 1011
>>> 1:0111 1101
# 4.赋值运算符
传统的赋值运算符只有一个:=
i1 += 5; : 在i1这个变量原值的基础上加上一个5,并将运算结果重新赋值回i1
+=:赋值运算符的扩展
+= -= *= /= %= &= |= ^= >>= <<= >>>=
赋值运算符扩展的规则:
①被扩展的运算符必须是双目运算符
②被扩展的运算符运算结果必须是数字
# 5.关系运算符
作用:用来表示两个数字类型晕算数的大小、等于等关系
< <= == != >= >
# 6.逻辑运算符
&:同真为真,一假全假
|:有真为真,全假为假
!:真假互换
^:相同为假,不同为真
&&:短路与:如果参与与运算的两个条件中,第一个条件就是假的,后序判断条件不执行
||:短路或:如果参与或运算的两个条件中,第一个条件就是真的,后序判断条件不执行
# 7.三目运算符
解释名词:运算符的目数:就是参与当前运算符运算的运算数个数
单目运算符:++ -- ~ !
双目运算符:+ - * / % >> << >>> & && | || == != < <= > >=
三目运算符:?:
作用:实现最简单的条件分支:根据一个条件是否达成,判断返回哪个具体的值
使用公式:条件成立吗 ? 成立返回这个 : 不成立返回这个;
注意:三目运算符长得像表达式,但是这个东西本质上还是运算符,只要是运算符就需要一个结果变量接收其运算结果
练习题:
通过三目运算符的嵌套,实现对int型整数a和b的大小关系的判断:
要求:
a > b:返回“大于”字符串
a == b:返回“等于”字符串
a < b:返回“小于”字符串
int a = 10;
int b = 15;
String resultStr = a > b ? "大于" : (a == b ? "等于" : "小于");
System.out.println(resultStr);
# 8.运算符的结合性
结合性:一个运算符从哪边向哪边进行运算
大部分的运算符都是从左向右进行结合的
Java中从右向左进行结合的运算符:赋值运算符、单目运算符、三目运算符