目录
一、算数运算符
1、基本四则运算符
加减乘除模(+ - * / %)
我们对于加减乘除,都非常熟悉,需要注意的是%
System.out.println(10%3);//1
System.out.println(10%-3);//1
System.out.println(-10%3);//-1
System.out.println(-10%-3);//-1
System.out.println(13.5%2);//1.5
System.out.println(1+0.9);
- 从上结果可知,我们%时,最后的数是正数还是负数,是由%左边的数决定的
- 做除法和取模时,右操作数不能为0
- % 不仅可以对整型取模,也可以对double类型取模,但是没有意义,一般都是对整型取模的
- 两侧操作数类型不一致时,向类型大的提升
2、增量运算符
+=,-=,*=,/=,%=
该种类型运算符操作完成后,会将操纵的结果赋值给左操作数。
int a=10;
a+=10;//a=a+10;//输出20
需要我们关注的是,运算符会帮我们进行类型转换
long d=100;
int b=20;
//我们将两个不同类型的数进行运算是,必须进行强制类型转换,否则会报错
//b=b+d;//这样不行,会报错,必须进行强制类型,
b=(int)(b+d);
System.out.println(b);//输出120,b=120
b+=d;//b=(int)(b+d);特点:运算符会帮我们进行类型转换
System.out.println(b);//输出220
二、自增/自减运算符 ++ –
++是给变量的值+1,–是给变量的值-1。
int a=10;
int b=a++;//b=10,a=11
int c=++a;//c=11,a=11
//如果单独使用a,前置++和后置++没区别
//如果混合使用,也就是如果要使用b或c就有区别
如果单独使用,【前置++】和【后置++】没有任何区别
如果混合使用,【前置++】先+1,然后使用变量+1之后的值,【后置++】先使用变量原来的值,表达式
结束时给变量+1
只有变量才能使用自增/自减运算符,常量不能使用,因为常量不允许被修改
三、关系运算符
关系运算符主要有六个:
== != < > <= >=
其计算结果是 true 或者 false 。
//关系运算符
//在JAVA中,=表示赋值,要和数学中的含义区别
//==表示相等
int a=1;
int b=2;
System.out.println(a==b);//false
System.out.println(a!=b);//true
System.out.println(a>b);//false
System.out.println(a<b);//true
System.out.println(a>=b);//false
System.out.println(a<=b);//true
在JAVA中,不可以这样些,因为关系运算符输出的是boolean型的结果,不可以和其他类型相比较
System.out.println(1<b<5);
//1<b 结果为false,false<5,不可以这样比较
四、逻辑运算符
逻辑运算符左右两侧都是boolean表达式的,输出结果也是boolean
1.逻辑与&&:有假则假
int x=1;
int y=2;
//&& 有假则假
System.out.println(x==1&&y==2);//真 && 真 则结果为真
System.out.println(x==1&&y!=2);//真 && 假 则结果为假
System.out.println(x!=1&&y==2);//假 && 真 则结果为假
System.out.println(x!=1&&y!=2);//假 && 假 则结果为假
2.逻辑或||:有真则真
int x=1;
int y=2;
//|| 有真则真
System.out.println(x==1||y==2);//真 && 真 则结果为真
System.out.println(x==1||y!=2);//真 && 假 则结果为真
System.out.println(x!=1||y==2);//假 && 真 则结果为真
System.out.println(x!=1||y!=2);//假 && 假 则结果为假
3.逻辑非 !
int x=1;
System.out.println(x==1);//true
System.out.println(x!=1);//false
4. 短路求值
//&&当表达式1为假时,不会执行表达式2了
System.out.println(10>20 && 10/0==0);//false
//这里表达式2除数为0,如果执行的话会编译失败,但是由于1为假,所以2不执行,不会报错
//||当表达式1为真时,不会执行表达式2了
System.out.println(10<20 || 10/0==0);//true
//这里表达式2除数为0,如果执行的话会编译失败,但是由于1为真,所以2不执行,不会报错
**& 和 | 如果表达式结果为 boolean 时, 也表示逻辑运算. 但与 && || 相比, 它们不支持短路求值. **
System.out.println(10 > 20 & 10 / 0 == 0); // 程序抛出异常
System.out.println(10 < 20 | 10 / 0 == 0); // 程序抛出异常
五、位运算符
1.按位与 &
如果两个二进制位都是 1, 则结果为 1, 否则结果为 0.
11 &3
1011 & 0011 =0011 ->3
2. 按位或 |
如果两个二进制位都是 0, 则结果为 0, 否则结果为 1.
11 &3
1011 & 0011 =1011 ->11
3.按位取反 ~
如果该位为 0 则转为 1, 如果该位为 1 则转为 0
11 | ~11
1011 | 0100补码
4.按位异或 ^
如果两个数字的二进制位相同, 则结果为 0, 相异则结果为 1.
1011^1100
11 ^ 12=0111->7
注意
x^x=1
0^x=x
六、移位运算
移位运算符有三个: << >> >>> ,都是二元运算符,且都是按照二进制比特位来运算
1.<<
左移 <<: 最左侧位不要了, 最右侧补 0.
11:0000 1011
11<<1: 0001 0110 ——>22——>112^1
11<<2: 0010 1100 ——>44——>112^2
2.>>
右移 >>: 最右侧位不要了, 最左侧补符号位(正数补0, 负数补1)
11:0000 1011
11>>1: 0000 0101 ——>5——>11/2^1
11>>2: 0000 0010 ——>2——>11/2^2
-11 原码1000 1011
反码1111 0100
补码1111 0101
-11>>1: 补码1111 1010
反码1111 1001
原码1000 0110——>-6
-11>>2: 补码1111 1101
反码1111 1100
原码1000 0011 ——>-3
3.>>>
无符号右移 >>>: 最右侧位不要了, 最左侧补 0.
-1
1000 0001
1111 1110
1111 1111
无符号右移后
0111 1111
七、 条件运算符
条件运算符只有一个:
表达式1 ? 表达式2 : 表达式3
这里的表达式1是布尔表达式
当 表达式1 的值为 true 时, 整个表达式的值为 表达式2 的值;
当 表达式1 的值为 false 时, 整个表达式的值为 表达式3 的值.
注意:
1. 表达式2和表达式3的结果要是同类型的,除非能发生类型隐式类型转换
2. 表达式不能单独存在,其产生的结果必须要被使用。
int x=1;
int y=2;
x>y?x:y//这样不行,表达式最后的结果没有被使用,这不是一个语句
八、运算符的优先级
运算符之间是有优先级的. 具体的规则我们不必记忆. 在可能存在歧义的代码中加上括号即可
总结:
这里主要介绍了JAVA中运算符的用法,我们需要重点关注的是
标黄的部分,点掌握位运算符。
希望这篇文章对你有所帮助