运算符
1.算数运算符(重点)
+(加)、-(减)、*(乘)、/(除)、%(取余)
注意事项:
1.当两个整数进行除法运算时候,结果只取整数部分,小数部分舍弃。
2.当希望结果中保留小数部分,具体方法如下:
a.将其中一个操作数强转为double类型在做运算
b.将其中一个操作数乘以1.0提升为double类型再运算(推荐)
3. 0不能作为除数,否则产生 java.lang.ArithmeticException(算数异常): / by zero
但是0.0可以做除数但结果是无穷大的,因此以后开发中避免使用0和0.0作为除数。
经验分享:
a.当+两边的操作数中只要有一个字符类型,则按照字符连接符来处理,结果依然是字符
b.将+两边的操作数都不是字符串时,则按照算数运算符来处理。
2.字符串连接运算符(重点)
“+”可以是实现字符串的连接。同时可以实现字符串与其他数据类型的相连。
3.自增减运算符(重点)
++(自增)、--(自减)
+ 表示加法运算 ++ 表示自增,也就是让当前变量自身的数值加1.
- 表示减法运算 -- 表示自减,也就是让当前变量自身的数值减1.
ia + ib ia++;
++(--)可分为前++ 和后++(--)
++ia 当++在前面的时候先进行加1的操作,然后再进行其他运算;
ia++ 当++再后面的时候先其他运算,然后再进行加1的操作
--ia 当--在前面的时候先进行减1的操作,然后再进行其他运算;
ia-- 当--在后面的时候先进行其他运算操作,然后再进行减1;
要求大家掌握的方法:
单独使用变量进行自增减的操作,建议尽量不要与其他运算符混合使用
4.赋值运算符(重点)
=、+=、-=、*=、/=、%=
赋值运算符将右边表达式的运算结果赋值给左边变量的运算符
<1>简单赋值
= 表示赋值运算符,用于将=右边的数据赋值给=左边的变量,覆盖该变量原来的数值。
<2>复合赋值
+=、-=、*=、/=、%=
5.关系/比较运算符(重点)
>、<、==、<=、!=、>=
比较运算符是用来判断两个表达式或值大小关系的运算符。
> 表示是否大于运算符
< 表示是否小于运算符
== 表示是否等于运算符
<= 表示是否小于等于运算符
!= 表示是否不等于运算符
>= 表示是否大于等于运算符
关系运算符参与的表达式最终结果为boolean类型, true(真) 和false(假)
6.逻辑运算符(重点)
逻辑运算符操作数为boolean表达式
Java提供的逻辑运算符有 &&(与) ||(或) !(非)
&&(与) 表示逻辑与运算符,相当于“并且” ,同真为真,一假为假
||(或) 表示逻辑或运算符,相当于“或者”,一真为真,同假为假。
!(非) 表示逻辑非运算符,相当于取反,真为假 ,假为真
&& 和 || 具备短路的特性: 如果通过第一个表达式的值即可得出最后的结果,则补计算第二个表达式。
短路的特性:
逻辑与:若第一个条件为假则整个表达式一定为假,此时跳过第二个条件的执行。
逻辑或:若第一个条件为真则整个表达式一定为真,此时跳过第二个条件的执行
7.条件/三目运算符(看情况而定)
<1>语法格式:
条件表达式 ? 表达式1 : 表达式2
<2>执行流程
判断条件表达式是否成立
= 若成立,则执行表达式1
= 若不成立,则执行表达式2
8.移位运算符(了解)
左移(<<) 、算数右移(>>) 、逻辑右移(>>>)
移位运算针对二进制移动
<< - 表示左移运算符,用于讲该整数的二进制向左边移动,右边补0 (丢去最高位,0补最低位)
举例:
5<<5
0000 0101(5的二进制)
0000 1010(第一次移动)
0001 0100(第二次移动)
0010 1000(第三次移动)
0101 0000(第四次移动)
1010 0000(第五次移动) ---- 结果 160 = 128+32
>> -- 表示右移运算符,用于将整数的二进制向右移动,左边补符号位.
>>> -表示无符号右移运算符,忽略符号位,用于将整数二进制向右边移动,左边补0
9.位运算符(了解)
&按位与、 |按位或 、^按位异或、 ~按位非,按照二进制逐位进行二进制运算。
&按位与 - 用于将整数的二进制进行与运算 , 同1 为1 ,一0为0
举例:
5&8
0000 0101
0000 1000
-------------------
0000 0000 0
|按位或
一1为1,同0为0
运算规则: 0|0 = 0 ; 0|1 = 1; 1|0 = 1 ; 1|1 = 1;
举例
5|8
0000 0101
0000 1000
---------------
0000 1101 --结果13
^按位异或
相同为0 不同为1
运算规则: 0^0 = 0; 0^1=1; 1^0 = 1; 1^1 = 0;
举例:
5^8
0000 0101
0000 1000
---------------
0000 1101 ---13
~按位非
按照二进制取反运算,1为0 ,0为1
举例:
^8---
0000 1000(二进制)
1111 0111 (1为0 ,0为1)(现在是负的二进制,转换成十进制输出)
0000 1000 (按位取反)
0000 1001(加一)
9 (是进制整数)
-9 (前面添加符号)
^-10----
0000 1010 (-10的绝对值转换为二进制)
1111 0101 (按位取反)
1111 0110 (加一)
0000 1001 (反码)
9 (转换为十进制)
举例(八位为例):
7:0000 0111
-7:1000 0111
反码:
正数的反码就是它本身
负数的反码,就是将原码的非符号部分,每一位取反
举例:
7:0000 0111
-7:1111 1000
补码:
正数的补码也是它本身
负数的补码,符号位不变,其余每一位取反之后,最后加一(反码+1)
举例:
7:0000 01111
-7:1111 1001
10.运算符优先级
(1) () 的优先级极高
(2) = 的优先级极低
(3) * / %的优先级 高于 + -,同级的优先级谁在前谁先执行。
11.表达式
表达式其实就是由操作数和运算符组成的。
例如:
int a = 10; int b = 5-3;
a>b true && false;