Java之运算符



1.算术运算符

基本的四则运算符有:" + “、” - “、” * “、” / “、” % "
加减乘比较简单,重点注意的是除法和取余数的计算

(1)int/int型

int a = 1;
int b = 2;
System.out.println(a / b);//结果为0,结果依然是int类型的,要想得到整数需要double类型来计算

(2)除数不能为0

int a = 1;
int b = 0;
System.out.println(a / b)//会抛出异常,程序直接在这一行结束,所以后面的表达式不会执行
Syetem.out.println("abcdef");

(3)%取余运算,不仅可以对int进行求余运算,也可以对double进行求余运算

System.out.println(10 % 3);//1
System.out.println(11.5 % 2.0);//1.5


增量赋值运算符 “ += ”、“ -= ”、“ *= ”、“ /= ”、 “ %= ”

int a = 10;
a += 1; //  a = a + 1
System.out.println(a);//11
short s = 10;
s =short)s + 9;//如果是s = s + 9会报错
s += 9;//不会报错,会自动类型转换


自增/自减运算符“ ++ ”、“ – ”

int a = 10;
a++;
System.out.println(a);//11
int c = 10;
++c;
System.out.println(c);//11

这样写前置++和后置++没有区别

int a = 10;
int b = ++a;
System.out.println(b);//11,a = 11
int c = a++;
System.out.println(c);//11,a = 12

如果带有返回值的后置++和前置++会有区别,前者先使用后++,后者先++后使用



2.关系运算符

关系运算符“ == ”、“ != ”、“ < > ”、“ <= ” 、“ >= ”

int a = 10;
int b = 20;
System.out.println(a == b);//false
System.out.println(a != b);//true
System.out.println(a < b);//true
System.out.println(a > b);//false
System.out.println(a <= b);//true
System.out.println(a >= b);//false

使用关系运算符,其结果的返回值是一个boolean类型的



3.逻辑运算符

逻辑表达式“ && ”、“ || ”、“ ! ”

其中逻辑运算符的操作数和返回值都是 boolean类型

(1)逻辑与&&
两个操作数都为true,结果才为true,否则结果为false

int a = 10;
int b = 20;
int c = 30;
System.out.println(a < b && b < c);//true

(2)逻辑或 ||
两个操作数都为 false, 结果为 false, 否则结果为 true

int a = 10;
int b = 20;
int c = 30;
System.out.println(a < b || b < c);//true

(3)逻辑非 !
操作数为 true, 结果为 false;
操作数为 false, 结果为 true
(这是个单目运算符, 只有一个操作数)

int a = 10;
int b = 20;
//System.out.println(!a < b);会报错,因为!后只能跟Boolean表达式,而a是整数
System.out.println(!(a < b))//这样才正确,false

注意:关系运算符“ && ”、“ || ”遵循短路求值的规则,例如:

[ 表达式1 || 表达式2 ] (这两个表达式全都是布尔表达式)
短路求值规则:只要有一个表达式为真,整个表达式为真,也就是如果表达式1为真,就不执行表达式2了;
如果是“ && ”的话,只要有一个表达式为假,整个表达式为假,也就是如果表达式1为假,就不执行表达式2了

System.out.println(10 > 20 && 10 / 0 == 0); //false
System.out.println(10 < 20 || 10 / 0 == 0); //true


4.位运算符

位运算符“ & ”、“ | ”、“ ~ ”、“ ^ ”

位操作是按二进制位进行运算,需要掌握二进制、八进制、十进制、十六进制之间的转换
0x 前缀的数字为十六进制数字.,十六进制可以看成是二进制的简化表示方式 一个十六进制数字对应4个二进制位;
比如:%0xf是按十六进制输出,表示10进制的15, 也就是二进制的1111


0 前缀的数字为八进制数字, 八进制也可以看成是二进制的简化表示方式.,一个十六进制数字对应3个二进制位;
比如%07是按八进制输出,表示10进制位的7,也就是二进制的111

(1)按位与&
0000 1010
0010 0111
0000 0010
结论:对应位都是1,结果就是1

(2)按位或|
0000 1011
0100 0111
0100 1111
结论:对应位如果有1,结果就是1,否则为0

(3)按位异或
0000 1011
0100 1110
0100 0101
结论:一样的地方结果是0,不一样的地方结果是1;
本质就是找不同

(4)按位取反~
0000 1011
1111 0100
结论:1变0,0变1



5.移位运算符

移位运算符“ << ”、“ >> ”、“ >>> ”

都是按照二进制位来运算的

(1)左移 <<
最左侧位不要了, 最右侧补 0

0000 1011 << 1 -> 0001 0110 表示22
相当与11 ∗ * 2^1

0000 1011 << 2 -> 0010 1100 表示44
相当于11 ∗ * 2^2

(2)右移 >>
最右侧位不要, 最左侧补符号位(正数补0, 负数补1)

0000 1011 >> 1 -> 0000 0101 表示5
相当于11 ∗ * 2^-1

0000 1011 >> 2 -> 0000 0010 表示2
相当于11 ∗ * 2^-2

负数:1111 1111 >> 1 -> 1111 1111

(3)无符号右移>>>
最右侧位不要了, 最左侧补 0,不管符号位
1111 1111 >>> 1 -> 0111 1111

总结:
①左移 N 位, 相当于原数字 * 2 的N次方;
②右移 N 位, 相当于原数字 / 2 的N次方;
③移动负数位或者移位位数过大都没有意义;
④没有无符号左移;



6.条件运算符

Java的条件运算符只有一个:
表达式1?表达式2:表达式3
当表达式1的值为true时,执行表达式2;当表达式1的值为false时,执行表达式3

int a = 10;
int b = 20;
int max = a > b ? a : b;//20,求两个整数的最大值

,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值