算数运算符、关系运算符、逻辑运算符、位运算符
Java的运算符可分为4类:算术运算符、关系运算符(又名比较运算符)、逻辑运算符和位运算符。
一、算术运算符
1.算术运算符包括:加(+)、减(-)、乘(*)、除(/)、取余(%)、自加1(++)、 自减1(--)
2.除(/)、取余(%)和 自加1(++)、 自减1(--)的区别:
- 单独运算时: 无论是前"++“还是后”++“都不影响变量的变化,”–"同理;
- 混合运算时: 前"++“前自加"1"后使用(赋值),后”++“是先使用再自加"1”.
小试身手:
public class Test1 {
public static void main(String[] args) {
int x = 4;
int y = (--x)+(x--)+(x*10);//3+3+20 x=2
System.out.println("x = " + x + ",y = " + y);
}
}
输出结果是: x=2 , y=26
二、关系运算符
1.关系运算符用于比较两个数值之间的大小,其运算结果为一个逻辑类型的数值。关系运算符有六个:等于(==)、不等于(!=)、大于(>)、大于等于(>=)、小于(<)、小于等于(<=)。
三、逻辑运算符
1.逻辑运算符要求操作数的数据类型为逻辑型,其运算结果也是逻辑型值。逻辑运算符有:逻辑与(&&)、逻辑或(||)、逻辑非(!)、逻辑异或(^)、逻辑与(&)、逻辑或(|)。
2. 真值表是表示逻辑运算功能的一种直观方法,其具体方法是把逻辑运算的所有可能值用表格形式全部罗列出来。Java语言逻辑运算符的真值表如下:
逻辑运算符的真值表
3. “&”、"&&“和 “|”、”||“的运算注意: “&”、”|“没有短路问题而”&&"、"||"存在短路问题. “A&&B"运算时,当A为false时,B不会进行运算; “A||B"运算时,当A为true时,B不会进行运算.
tips: 在程序设计时使用”&&“或”||“而不要去使用”&“或”|”.
四、位运算符
1.位运算是以二进制位为单位进行的运算,其操作数和运算结果都是整型值。
位运算符共有7个,分别是:位与(&)、位或(|)、位非(~)、位异或(^)、右移(>>)、左移(<<)、0填充的右移(>>>)。
2.位运算的位与(&)、位或(|)、位非(~)、位异或(^)与逻辑运算的相应操作的真值表完全相同,其差别只是位运算操作的操作数和运算结果都是二进制整数,而逻辑运算相应操作的操作数和运算结果都是逻辑值。
位运算示例
运算符 名称 示例 说明
& 位与 x&y 把x和y按位求与
| 位或 x|y 把x和y按位求或
~ 位非 ~x 把x按位求非
^ 位异或 x^y 把x和y按位求异或
>> 右移 x>>y 把x的各位右移y位
<< 左移 x< >>> 右移 x>>>y 把x的各位右移y位,左边填0
举例说明:
- 有如下程序段:
int x = 64; //x等于二进制数的01000000
int y = 70; //y等于二进制数的01000110
int z = x&y //z等于二进制数的01000000
即运算结果为z等于二进制数01000000。位或、位非、位异或的运算方法类同。 - 右移是将一个二进制数按指定移动的位数向右移位,移掉的被丢弃,左边移进的部分或者补0(当该数为正时),或者补1(当该数为负时)。这是因为整数在机器内部采用补码表示法,正数的符号位为0,负数的符号位为1。例如,对于如下程序段:
int x = 70; //x等于二进制数的01000110
int y = 2;
int z = x>>y //z等于二进制数的00010001
即运算结果为z等于二进制数00010001,即z等于十进制数17。
对于如下程序段:
int x = -70; //x等于二进制数的11000110
int y = 2;
int z = x>>y //z等于二进制数的11101110
即运算结果为z等于二进制数11101110,即z等于十进制数-18。要透彻理解右移和左移操作,读者需要掌握整数机器数的补码表示法。 - 0填充的右移(>>>)是不论被移动数是正数还是负数,左边移进的部分一律补0。
五、运算符的优先级
以下按优先级从高到低的次序列出Java语言中的所有运算符,表中结合性一列中的“左右”表示其运算次序为从左向右,“右左”表示其运算次序为从右向左。
优先级 运算符 结合性
1 . [] () ; ,
2 ++ ―― += ! ~ +(一元) -(一元) 右左
3 * / % 左右
4 +(二元) -(二元) 左右
5 << >> >>> 左右
6 < > <= >= instanceof 左右
7 = = != 左右
8 & 左右
9 ^ 左右
10 | 左右
11 && 左右
12 || 左右
13 ?: 右左
14 = *= /= %= += -= <<= >>= >>>= &= ^= |= 右左