JAVA—运算符

一、算数运算符

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);  
  1. 从上结果可知,我们%时,最后的数是正数还是负数,是由%左边的数决定的
  2. 做除法和取模时,右操作数不能为0
  3. % 不仅可以对整型取模,也可以对double类型取模,但是没有意义,一般都是对整型取模的
  4. 两侧操作数类型不一致时,向类型大的提升

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——>11
2^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中运算符的用法,我们需要重点关注的是
标黄的部分,点掌握位运算符

希望这篇文章对你有所帮助

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值