目录
一.算术运算符
(一).四则运算符:加减乘除模(+-*/%)
(二).增量运算符+= -= *= %=
(三).自增/自减运算符++ --
二.关系运算符== != < > <= >=
三.逻辑运算符&& || !
(一).逻辑与 (表达式1&&表达式2)
(二).逻辑或 ||
(三).逻辑非 !
(四).& 和 |(一般不这样用)
四.位运算符& | ~ ^
1.按位与&(都为1结果才是1,否则为0)
2.按位或|(有一个1结果就是1)
3.按位异或^(相异为1)
4.按位取反~(1变0,0变1)
五.移位(比特位/二进制位)运算 << >> >>>
1.左移 <<
2.右移 >>
3.无符号右移>>>
4.注意:
六.条件运算符
运算符就是对操作数进行操作的符号
一.算术运算符
(一).四则运算符:加减乘除模(+-*/%)
1.上述运算符都是二元运算符。(必须有左右两个操作数)
2.int型/int型结果是int型,并且结果回向下取整。(例如3/2=1)
3.进行除法和模运算时,右操作数不能为0。(例如3/0,3%0,会出现错误)
4.在java中不仅可以对整型取模而且可以对double类型取模。(例如11.5%2.0==1.5)
5.两侧操作数类型不一致时,向类型大的提升。[1+0.2==1.2 int型(会提升为double型)+double型=double型]
(二).增量运算符+= -= *= %=
(三).自增/自减运算符++ --
1.a++与++a的区别。
2.a++中a必须是变量而不能是常量,常量不允许被修改。
二.关系运算符== != < > <= >=
1.一个错误写法: 3 < a < 5 (3 < a执行完是boolean型, boolean怎么能和5(int型)比较大小呢)
三.逻辑运算符&& || !
运算后的结果都是boolean类型
(一).逻辑与 (表达式1&&表达式2)
1.表达式1与表达式2都为真,结果才是真,除此之外结果都为假。
2.短路求值:表达式1结果为false,表达式2不会被系统执行,结果一定是false
(二).逻辑或 ||
1.表达式1或者表达式2有一个结果为真,最终运算结果就是真(有一个为真就行)
2.短路求值:表达式1结果为true, 表达式2不会被执行,结果一定是true
(三).逻辑非 !
(四).& 和 |(一般不这样用)
&和|也可以表示逻辑运算,但与&&和||相比不支持短路求值
public static void main(String[] args) {
System.out.println((10 > 20) && (10 / 0 == 0));//不会报错,因为10 > 20执行后结果为false,10 / 0 == 0不会被执行
System.out.println((10 > 20) & (10 / 0 == 0));//会报除数不能为0的错误,因为两个表达式都被执行了
}
四.位运算符& | ~ ^
java中数据存储的最小单位是字节(byte, 1byte = 8bit),而数据操作的最小单位是比特(bit)
位运算就是对二进制位(比特位)进行操作。
注意;
这里的& |与标题三中的区别, 当&和|的操作数为整数(int, short, long, byte) 的时候, 表示按位运算, 当操作数为boolean的时候, 表示逻辑运算.
1.按位与&(都为1结果才是1,否则为0)
int a = 10;
int b = 20;
System.out.println(a & b);
2.按位或|(有一个1结果就是1)
3.按位异或^(相异为1)
public static void main3(String[] args) {
int a = 0x1;
int b = 0x2;
System.out.printf("%x\n", a ^ b);//输出3
}
4.按位取反~(1变0,0变1)
public static void main(String[] args) {
int a = 0xf;//前缀0x代表十六进制,0xf化为十进制为15,化为二进制为1111
System.out.printf("%x\n", ~a);//%x表示按十六进制方式输出
}
五.移位(比特位/二进制位)运算 << >> >>>
1.左移 <<
左移会丢失符号位,因此正数左移可能会变成负数
int a = 0x10;//十进制为2
System.out.printf("%x\n", a << 1);
//运行结果20(十六进制),十进制为4
2.右移 >>
最右侧bit位不要, 正数则最左侧补0,负数则最左侧补1
3.无符号右移>>>
最右侧bit位丢掉,最左侧补0
4.注意:
(1).没有 <<<
(2).运算2^N可以借助可以借用移位运算符
六.条件运算符
表达式1 ? 表达式2 : 表达式3
1.表达式2与表达式3结果必须是同类型
2.不能单独存在,产生的结果必须要被使用
int a = 10;
int b = 20;
a > b? a : b; // 报错:Error:(15, 14) java: 不是语句
3.
public static void main(String[] args) {
boolean flag = true == true ? false ? true :false :true;
System.out.println(flag);
}
//运行结果为false
//boolean flag = (true == true) ? (false ? true : false) :true;
true == true 满足执行表达式1(false ? true : false)