1.运算符的分类
(1)按操作数的个数分类:
单目运算符:只需一个操作数参与运算。
双目运算符:需要两个操作数参与运算。
三目运算符:需要三个操作数参与运算。
(2)按照运算符功能来分,基本的运算符有下面几类:
算数运算符 :+、-、*、/、%、++、– –。
关系运算符:>、<、>=、<=、==、!=。
逻辑运算符: !、&&、||、&、| 。
位运算符 :>>、<<、>>>、&、|、^、~。
赋值运算符:=、扩展赋值运算符,如+=、/=等。
条件运算符 :? :
其他:·,[],instanceof,()等
(1)算数运算符
算数运算符分为双目运算符和单目运算符。
(2)关系运算符
关系运算符是两个操作数之间的比较运算,关系运算符包括大于(>)、小于(<)、大于等于(>=)、小于等于(<=)、等于(==)、不等于(!=) 这六个运算符。其中“==”和“!=”还可用于布尔类型及字符串类型的操作。关系运算符的运算结果是布尔类型值,如果关系成立为true,否则为false。
下表为Java支持的关系运算符。表格中的实例整数变量A的值为5,变量B的值为10:
运算符 描述 例子
== 检查如果两个操作数的值是否相等,如果相等则条件为真。 (A == B)为假(非真)。
!= 检查如果两个操作数的值是否相等,如果值不相等则条件为真。 (A != B) 为真。
> 检查左操作数的值是否大于右操作数的值,如果是那么条件为真。 (A> B)非真。
< 检查左操作数的值是否小于右操作数的值,如果是那么条件为真。 (A <B)为真。
>= 检查左操作数的值是否大于或等于右操作数的值,如果是那么条件为真(A> = B)为假。
<= 检查左操作数的值是否小于或等于右操作数的值,如果是那么条件为真。 (A <= B)为真。
public class Test {
public static void main(String[] args) {
int a = 5;
int b = 10;
System.out.println("a==b : " + (a == b) ); // a==b : false
System.out.println("a!=b : " + (a != b) ); // a!=b : true
System.out.println("a>b : " + (a > b) ); // a>b : false
System.out.println("a<b : " + (a < b) ); // a<b : true
System.out.println("b>=a : " + (b >= a) ); // b>=a : true
System.out.println("b<=a : " + (b <= a) ); // b<=a : false
}
}
(3)逻辑运算符
逻辑运算符是对布尔类型操作数进行的与,或,非,异或等运算,运算结果仍然是布尔类型值。逻辑运算符有&(与),I(或),!(非),^(异或),&&(条件与),II(条件或)。常用的逻辑运算符的基本运算,假设布尔变量A为真,变量B为假。
public class Test {
public static void main(String[] args) {
boolean a = true;
boolean b = false;
System.out.println("a && b = " + (a&&b)); // false
System.out.println("a || b = " + (a||b) ); // true
System.out.println("!(a && b) = " + !(a && b)); // true
}
}
注意事项:
逻辑运算符可以针对结果为布尔值的表达式进行逻辑运算。如:5 > 3 && 1 != 0的结果为true
运算符“&”和“&&”都表示与操作,当且仅当运算符两边的操作数都为true时,其结果才为true,否则结果为false。
“&”和“&&”的区别:在使用“&”进行运算时,不论左边为true或者false,右边的表达式都会进行运算。如果使用“&&”进行运算,当左边为false时,右边的表达式不会进行运算,因此“&&”被称作短路与。
运算符“|”和“||”都表示或操作,当运算符任何一边的操作数或表达式为true时,其结果为true,当两边的值都为false时,其结果才为false。同与操作类似,“||”表示短路或,当运算符“||”的左边为true时,右边的表达式不会进行运算。
运算符“^”表示异或操作,当运算符两边的布尔值相同时(都为true或都为false),其结果为false。当两边布尔值不相同时,其结果为true。
(4)位运算符
位运算符是对操作数以二进制比特为单位进行的操作和运算,位运算数的运算对象只能是整型和字符型,结果为整型。
位运算:就是将参与运算的数据转换成2进制【0101001】
10进制与2进制的转换
1. 原码
原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值.
2. 反码
反码的表示方法是:
正数的反码是其本身【原码】
负数的反码是在其原码的基础上, 符号位不变,其余各个位取反.
3. 补码
补码的表示方法是:
正数的补码就是其本身【原码】
负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)
整数的2进制就是源码
负数的2进制实质上补码表示。
-3 => 10000011—>11111100—>11111101【负数的原码取反+1】{符号位不变}
-3 => 00000011【3】—>11111100【取反】—>11111101【+1】 【负数的绝对值的原码的取反+1】
-7 => 00000111【7】—>11111000【取反】—>11111001【+1】
-12 => 00001100【12】—>11110011【取反】—>11110100【+1】
下表列出了位运算符的基本运算:
(5)赋值运算符
赋值运算符用于给变量赋值,格式如下:
变量名 = 表达式;
赋值运算符的次序是从右向左的,即先计算表达式的值,再将表达式的赋值予变量。
public class Test {
public static void main(String[] args) {
int a = 10;
int b = 20;
int c = 0;
c = a + b; // 30
c += a ; // c = c+a = 30+10 = 40
c -= a ; // c = c-a = 40-10 = 30
c *= a ; // c = c*a = 30*10 = 300
c /= a ; // c = c/a = 300/10 = 30
c %= a ; // c= c%a = 30%10 = 0
a = 10;
c = 15;
c /= a ; // c = c/a = 15/10 = 1
a = 10;
c = 15;
c %= a ; // c = c%a = 15%10 = 5
c <<= 2 ; // c = c<<2 = 5<<2 = 20
c >>= 2 ; // c = c>>2 = 20>>2 = 5
c >>= 2 ; // c = c>>2 = 5>>2 = 1
c &= a ; // c = c&a = 1&10 = (00000001 & 00001010=00000000) = 0
c ^= a ; // c = c^a = 0^10 = (00000000 ^ 00001010=00001010) = 10
c |= a ; // c = c|a = 10|10 = (00001010 | 00001010=00000000) = 0
}
}
(6)条件运算符
条件运算符与条件表达式的格式:e1? e2: e3。
格式说明:e1为Boolean类型,e2与e3的类型相同。
执行顺序: 若e1的值为true.则e2的值为最终结果;若e1的值为false,则e3的值为最终结果。
例如:
int min, x=4,y=20;
min=(x<y)? x : y;
即min的值是4。
注意: 条件运算符的优先级低于关系运算符和算术运算符,高于赋值运算符。 JAVA中条件运算表达式中的关系表达式值的类型必须为布尔类型,只能是true或false。 条件运算符的结合性是右结合性。
(7)运算符的优先级和结合性
优先级相同的运算符,运算次序由结合性决定。
运算符有不同的优先级,所谓优先级就是在表达式运算中的运算顺序。
下表中列出了运算符的优先级和结合性,其中数字越小的优先级越高。
类别 操作符 结合性
后缀 () [] . (点操作符) 左到右
一元 + + - !〜 右到左
乘性 * /% 左到右
加性 + - 左到右
移位 >> >>> << 左到右
关系 >> = << = 左到右
相等 == != 左到右
按位与 & 左到右
按位异或 ^ 左到右
按位或 | 左到右
逻辑与 && 左到右
逻辑或 | | 左到右
条件 ?: 右到左
赋值 = + = - = * = / =%= >> = << =&= ^ = | = 从右到左
逗号 , 左到右
2.表达式 :
- Java中的语句有很多种形式,表达式就是其中一种形式。表达式由操作数与运算符所组成。
- 对表达式求值将得到一个结果。字面值和变量是最简答的表达式,其结果就是字面值和变量的值。把一个运算符和一个或多个运算对象组合起来可以生成较复杂的表达式。
- 操作数可以是常量、变量,也可以是方法;运算符就是数学中的运算符号如“+”、“-”、“*”、“/”、“%”等。以下面的表达式(z+100)为例,“z”与“100”都是操作数,而“+”就是运算符。
总结: