Java运算符

目录

1.运算符介绍

2.算术运算符

2.1 基本四则运算符(加减乘除模)

2.2 增量运算符(+= -= *= %=)

2.3 自增/自减运算符(++ --)

3.关系运算符(主要有六个:==\!=\<\>\<=\>=)

4.逻辑运算符(主要有三个:&&、||、!)

4.1 逻辑与&&

4.2 逻辑或||

4.3 逻辑非!

4.4 短路求值

5.位运算符(主要有四个:&、|、~、^)

5.1 按位与&

5.2 按位或|

5-3 按位取反~

5-4 按位异或^

6.移位运算符(<<、>>、>>>)

6.1 左移<<

6.2 右移>>

6.3 无符号右移>>>

7.条件运算符(表达式1?表达式2:表达式3)

8.运算符的优先级


1.运算符介绍

       运算符(对操作数进行操作时的符号,不同运算符操作的含义不同)
算术运算符

基本四则运算符:+ - * / %

增量运算符:+= -= *= %=

自增/自减运算符:++ --

关系运算符主要有六个:==\!=\<\>\<=\>=
逻辑运算符主要有三个:&&、||、!
位运算符主要有四个:&、|、~、^
移位运算符<<、>>、>>>
条件运算符表达式1?表达式2:表达式3

2.算术运算符

2.1 基本四则运算符(加减乘除模)

注:

  • 都是二元运算符,使用时必须有左右两个操作数

代码2-1:

public class Test {
    public static void main(String[] args) {
        int a = 20;
        int b = 10;
        System.out.println(a+b);
        System.out.println(a-b);
        System.out.println(a*b);
        System.out.println(a/b);
        System.out.println(a%b);//模运算相当于数学中除法的余数
    }
}

运算结果如下:

  • 下面看几个注意事项:

①int/int=int,并且会向下取整

代码2-2:

int a = 5;
int b = 2;
System.out.println(a/b);

看运行结果:

 

按照我们的数学逻辑来算,这个结果本应该是2.5,那么为什么在Java中会输出2.5呢?

这是因为会向下取整,即小数点之后全部被舍弃掉了。

那么如何才能得到2.5呢?

代码2-3:

int a = 5;
int b = 2;
double c = a*1.0/b;
System.out.println(c);

此时的运行结果即为2.5

②做除法和取模时,右操作数不能为0(这也是我们在数字中常说的分母不为0)

代码2-4:

int a = 4;
int b = 0;
System.out.println(a/b);
System.out.println(a%b);

 运行时系统报错,无法计算

③%不仅可以对整形取模,也可以对double取模,但没有意义

代码2-5:

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

④两侧操作数类型不一致时,向类型大的提升

代码2-6:

System.out.println(1+0.2);

1是int类型,0.2是double类型,在相加之前int被提升为double类型。

2.2 增量运算符(+= -= *= %=)

注:

  • 只有变量才能使用该运算符,常量不能使用

代码2-7:

        int a = 2;
        a+=3;//a=a+3=5
        System.out.println(a);
        a-=1;//a=a-1=4
        System.out.println(a);
        a*=5;//a=a*5=20
        System.out.println(a);
        a/=2;//a=a/2=10
        System.out.println(a);
        a%=3;//a=a%3=1
        System.out.println(a);

看运行结果:

2.3 自增/自减运算符(++ --)

  • ++是给变量的值+1
  • --是给变量的值-1

代码2-8:

        int a = 1;
        a++;//后置++,表示a的值+1,此时a=2
        System.out.println(a++);//先输出a的值,再++//此时a=2
        System.out.println(a);//3

        int b = 2;
        ++b;//前置++,表示b的值+1,此时b=3
        System.out.println(++b);//先++,再输出b//此时b=4
        System.out.println(b);//4

注:

  • 若单独使用,【前置++】和【后置++】无区别
  • 只有变量才能使用自增/自减运算符,常量不可使用,因为常量不允许被修改

3.关系运算符(主要有六个:==\!=\<\>\<=\>=)

计算结果为true或者false

代码3-1:

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

运行结果如下:

注:

  • 当需要进行多次判断时,不能连着写,例如:3<5<7,java程序中的运算与数学中的有区别

4.逻辑运算符(主要有三个:&&、||、!)

注:

  • 语法规则:逻辑与&&和逻辑或||——左右表达式必须是boolean类型的结果

                         逻辑非——!表达式

  • 运算结果都为boolean类型

4.1 逻辑与&&

&&相当于数学逻辑运算中的且(一假即假

表达式1表达式2结果

代码4-1:

        int a = 1;
        int b = 2;
        System.out.println(a==1&&b==2);//true
        System.out.println(a==1&&b>8);//false
        System.out.println(a>5&&b==2);//false
        System.out.println(a>6&&b>7);//false

4.2 逻辑或||

||相当于数学逻辑运算中的或(一真即真

表达式1表达式2结果

代码4-2:

        int a = 1;
        int b = 2;
        System.out.println(a==1||b==2);//true
        System.out.println(a==1||b>3);//true
        System.out.println(a!=1||b==2);//true
        System.out.println(a!=1||b>3);//false

4.3 逻辑非!

真变假,假变真

表达式结果

代码4-3:

        int a = 1;
        System.out.println(!(a==1));//false
        System.out.println(!(a!=1));//true

4.4 短路求值

代码4-4:

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

看此代码的运行结果:

 ??我们都知道,10/0会使程序抛出异常,那么为什么此代码能正常运行呢?

这是因为:对于&&,如果左侧值为false,一假即假,结果就为false,程序并不会计算右侧表达式

                  对于||,如果左侧值为true,一真即真,结果也就为true了

注:

&和|如果表达式结果为boolean时,也表示逻辑运算,但它们并不支持短路求值

比如代码4-5:

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

运行结果如下:

—— 程序抛出异常

5.位运算符(主要有四个:&、|、~、^)

  • ~是一元运算符,|、&、^是二元运算符
  • 位操作表示:按二进制位运算

5.1 按位与&

如果两个二进制位都是1,则结果为1,否则为0

代码5-1:

        int a = 10;//00001010
        int b = 20;//00010100
        System.out.println(a&b);//00000000

运行结果如下:

5.2 按位或|

如果两个二进制位都是0,则结果为0,否则为1

代码5-2:

        int a = 10;//00001010
        int b = 20;//00010100
        System.out.println(a|b);//00011110

运行结果如下:

注:

  • 当&和|的操作数为整数(int、short、long、byte)时,表示按位运算
  • 当操作数为boolean时,表示逻辑运算

5-3 按位取反~

如果该位为0.则转为1;如果该位为1,则转为0

代码5-3:

        int a = 0xf;
        System.out.printf("%x\n",~a);//  \n是换行符

运行结果如下:

注:

  • 0x前缀的数字为十六进制数字,十六进制可以看成是二进制的简化表示方式,一个十六进制数字对应4个二进制位
  • 0xf表示10进制的15,也就是二进制的111
  • printf能够格式化输出内容,%x表示按照十六进制输出

5-4 按位异或^

如果两个数字的二进制位相同,则结果为0,相异则结果为1

如果两个数相同,则异或的结果为0

代码5-4:

        int a = 0x1;
        int b = 0x2;
        System.out.printf("%x\n",a^b);

运行结果如下:

6.移位运算符(<<、>>、>>>)

<<、>>、>>>都是二元运算符,且都是按照二进制比特位来运算的

6.1 左移<<

  • 最左侧位不要了,最右侧补0
  • 向左移位时,丢弃的是符号位,因此正数左移可能会变成负数

代码6-1:

        int a = 10;//0000 1010
        System.out.println(a<<1);//0001 0100 //20

6.2 右移>>

  • 最右侧位不要了,在左侧补符号位(正数补0,负数补1)

代码6-2:

        int a = 10;//0000 1010
        System.out.println(a>>1);//0000 0101 //5

6.3 无符号右移>>>

  • 最右侧位不要了,最左侧补0

代码6-3:

        int a = 10;//1000 1010
        System.out.println(a>>>1);//0000 0101 //5

注:

  • 左移一位,相当于原数字*2,相当于原数字*2的n次方
  • 右移一位,相当于原数字/2,相当于原数字/2的n次方
  • 由于计算机计算移位效率高于计算乘除,当某个代码正好乘除2的n次方的时候可以用移位运算代替
  • 移动负数位或者移位位数过大都没有意义
  • 没有无符号左移

7.条件运算符(表达式1?表达式2:表达式3)

  • 表达式1为真,执行表达式2,否则执行表达式3
  • 是Java中唯一的一个三目运算符,是条件判断语句的简化写法

代码7-1:

        int a = 1;
        int b = 2;
        int max = a>b?a:b;
        System.out.println(max);

运行结果如下:

 注:

①表达式2和表达式3的结果要是同类型的,除非能发生类型隐式类型转换

代码7-2:

        int a = 1;
        int b = 2;
        int c = a>b?1:2.0;
        System.out.println(c);

运行结果如下:

②表达式不能单独存在,其产生的结果必须要被使用

代码7-3:

        int a = 10;
        int b = 20;
        a>b?a:b;

 运行结果如下:

8.运算符的优先级

在一条表达式中,如果运算符的优先级没有弄清楚,可能会造成很大的麻烦

代码8-1:

        int a = 2;
        int b = 20;
        int c = a + (b-a)>>1;
        System.out.println(c);

运行结果如下:

在上述表达式中,+的优先级高于>>,所以先做加法,结果为20,最后再进行右移,所以最终结果为10

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值