文章目录
前言
2021-04-10 :Java运算符
上一篇:Java基本数据类型转换
提示:以下是本篇文章正文内容,下面案例可供参考
一、运算符思维导图
二、算术运算符
2.1 自增自减运算符
自增自减运算符属于一元运算符,指的是操作数只有一个
符号 | 说明 |
---|---|
++ | a++ -->表示a=a+1 |
– | a-- -->表示a=a-1 |
public class Test {
public static void main(String[] args) {
// 一元运算符: ++(自增) --(自减)
int num1=10;
int num2=20;
System.out.println("num1="+(++num1));
System.out.println("num2="+(num2++));
}
}
运算结果:
num1=11
num2=20
运算结果分析:
由运算结果可以知道,++在操作数num1的前面,先进行加1的操作,再输出;++在操作数的num2的后面,先输出,再进行加1的操作。自减操作同理
2.2 四则运算符
四则运算符是二元运算符,指的是操作数有两个
符号 | 说明 |
---|---|
+ | 加号操作 |
- | 减号操作 |
* | 乘号操作 |
/ | 取整操作(两数相除取商) |
% | 模操作(两数相除取余) |
public class TypeChange {
public static void main(String[] args) {
// 二元运算符: + - * / %
int a=5;
int b=3;
int c=-5;
int d=-3;
// /运算
System.out.println("5/3="+(a/b));
System.out.println("5/-3="+(a/d));
System.out.println("-5/3="+(c/b));
System.out.println("-5/-3="+(c/d));
System.out.println("-------------------------------");
// %运算
System.out.println("5%3="+(a%b));
System.out.println("5%-3="+(a%d));
System.out.println("-5%3="+(c%b));
System.out.println("-5%-3="+(c%d));
}
}
运算结果:
5/3=1
5/-3=-1
-5/3=-1
-5/-3=1
-------------------------------
5%3=2
5%-3=2
-5%3=-2
-5%-3=-2
运算结果分析:
模运算的结果是否有负号,取决于除数是否带符号
三、赋值运算符
符号 | 说明 |
---|---|
= | 将右边赋值给左边 |
+= | a+=b 表示 a=a+b |
-= | a-=b表示 a=a-b |
*= | a*=b表示 a=a*b |
/= | a/=b表示 a=a/b |
%= | a%=b表示 a=a%b |
public class Demo1 {
public static void main(String[] args) {
// 将6赋值给a,3赋值给b
int a=6;
int b=3;
System.out.println("a+=b -->"+(a+=b));
}
}
运算结果:
a+=b -->9
运算结果分析:
a+=b同 a=a+b; 其它同理
四、关系运算符
符号 | 说明 |
---|---|
== | 判操作数是否相等 |
< | 判断左边操作数是否小于右边操作数 |
<= | 判断左边操作数是否小于等于右边操作数 |
> | 判断左边操作数是否大于等于右边操作数 |
>= | 判断左边操作数是否大于等于等于右边操作数 |
!= | 判断左边操作数是否不等于等于右边操作数 |
五、逻辑运算
符号 | 说明 |
---|---|
&& | 逻辑与,可以进行短路 |
II | 逻辑或,可以进行短路 |
! | 逻辑非 |
& | 逻辑与,不可以进行短路 |
I | 逻辑或,不可以进行短路 |
&&和&短路分析
public class Demo1 {
public static void main(String[] args) {
int a=4;
int b=0;
// 0是不能做除数的
System.out.println(a<b&&10/0==0);
}
}
&&运算结果:
false
public class Demo1 {
public static void main(String[] args) {
int a=4;
int b=0;
// 0是不能做除数的
System.out.println(a<b&10/0==0);
}
}
&运算结果:
Exception in thread "main" java.lang.ArithmeticException: / by zero
at NewStudy/cn.com.ccit.chap1.Demo1.main(Demo1.java:8)
运算结果分析:
在使用&&情况下前一个布尔表达式a<b已经判断出为false,&&的判断是有假即为假,不需要进行第二个布尔表达式判断,直接返回false;
但是使用&的时候,即便判断出第一个表达式为false,依旧会对第二个表达式进行判断,由于0不能做除数,便抛出了算术异常
综上所述&&的使用有短路操作,而&没有;
逻辑或||运算也是如此,||判断是只要有一个true,即返回true.当第一个布尔表达式能够判断出为true时,直接返回结果,不会对第二个表达式进行判断;但是|会对两个布尔表达式都进行判断
六、位运算符
操作 | 说明 |
---|---|
& | 1&1=1; 1&0=0; 0&1=0; 0&0=0 |
I | 1I1=1; 1I0=1; 0I1=1; 0I0=0 |
~ | 按位取反 ,将每位二进制取反 |
^ | 异或操作 |
1.原码&反码&补码
我们读取的十进制是根据原码来读取,而在内存中,数值都是以二进制补码形式存储的。正数的补码和原码一样,负数的补码得到过程:原码 转 反码 再转 补码
2.正数位运算
public class Demo1 {
public static void main(String[] args) {
// a=5=0000 0101
// b=3=0000 0011
int a=5;
int b=3;
// &: 0000 0101&0000 0011=0000 0001=1
System.out.println("a&b="+(a&b));
// |:0000 0101|0000 0011=0000 0111=7
System.out.println("a|b="+(a|b));
// ~0000 0101=>取反:1111 1010 =>反码:1000 0101 =》原码:1000 0110
System.out.println("~a="+(~a));
// ^:0000 0101 ^ 0000 0011=0000 0110=6
System.out.println("a^b="+(a^b));
}
}
&运算结果:
a&b=1
a|b=7
~a=-6
a^b=6
3.负数位运算
public class Demo1 {
public static void main(String[] args) {
// a=5=1000 0101
// b=3=1000 0011
int a=-5;
int b=-3;
System.out.println("a&b="+(a&b));
System.out.println("a|b="+(a|b));
System.out.println("~a="+(~a));
System.out.println("a^b="+(a^b));
}
}
&运算结果:
a&b=-7
a|b=-1
~a=4
a^b=6
运算结果分析:
七、移位运算符
符号 | 说明 |
---|---|
>> | 右移位,是带符号移位,右边低位删除,左边高位补符号位,正0负1 |
<< | 左移位,是带符号移位,左边高位删除,右边低位补0 |
>>> | 无符号右移位,右边低位删除,左边高位补0 |
1.正数移位运算
public class Demo1 {
public static void main(String[] args) {
// a=5=0000 0101
int a=5;
// a>>3表示最右边的三位不要,在最左边添加3个0
// 向左添加时,符号位取决操作数的正负,正1负0
// 结果为: 000 0000 0 ---> 0000 0000=0
System.out.println("a>>3 -->"+(a>>3));
// a<<3表示最左边的三位不要,在最右边添加3个0
// 结果为: 0 0101 000 ---> 0010 1000=2^5+2*3=40
System.out.println("a<<3 -->"+(a<<3));
// a>>>3表示最右边的三位不要,在最左边添加3个0
// 结果为: 000 0000 0 ---> 0000 0000
System.out.println("a>>>3 -->"+(a>>>3));
}
}
&运算结果:
a>>3 -->0
a<<3 -->40
a>>>3 -->0
运算结果分析:
2.负数移位运算
public class Demo1 {
public static void main(String[] args) {
// 负数都是以补码的形式存放在计算机内
// 原码: a=-5=1000 0101 补码=反码+1 = 1111 1010+1=1111 1011
int b=-5;
// b>>3表示最右边的三位不要,在最左边添加3个0
// 结果为:补码: 000 1111 1 --->补码: 1111 1111 -->反码: 1111 1110 --->原码: 1000 0001=-1
System.out.println("b>>3 -->"+(b>>3));
// b<<3表示最左边的三位不要,在最右边添加3个0
// 结果为: 补码: 1 1011 000--->补码:1101 1000 --->反码:1101 0111 --->原码: 1010 1000=-40
System.out.println("b<<3 -->"+(b<<3));
}
}
&运算结果:
b>>3 -->-1
b<<3 -->-40
运算结果分析:
左移位类似于 :操作数*2^移动位数; 右移位类似: 操作数/(2^移动位数)
八、条件运算符
是Java中唯一一个三元运算符
public class Demo1 {
public static void main(String[] args) {
String result=5==9?"等于":"不等于";
System.out.println(result);
}
}
运算结果:
不等于
运算结果分析:
【表达式?结果1:结果2】当表达式的结果为true时,返回的是结果1,当表达式的结果为false时,返回的是结果2
九、总结
表达式:指的是使用运算符连接的变量或者字面值,并得到一个最终结果
下一篇:Java基础选择与循环结构