[Java]算术运算符 逻辑运算符 位运算符 移位运算符 关系运算符 三目运算符

本文详细介绍了Java中的运算符,包括算术运算符(如+、-、*、/和%),类型转换规则,关系运算符(>,<,==等),逻辑运算(&&,||,!),位运算(&,|,^,~),移位运算(<<,>>,>>>),以及三目运算符的用法。还强调了类型匹配和运算符的使用限制。
摘要由CSDN通过智能技术生成

运算符

变量+运算符=表达式

算术运算符+ - * / %

  • 做除法和取模时,右操作数不能为0

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

 System.out.println(5/2);//2
 System.out.println((float)5/2);//2.5
 System.out.println(5/(float)2);//2.5
 System.out.println((float)(5/2));//2.0 先运算得2在强转
 System.out.println(10%3);//1
 System.out.println(10%-3);//1 商-3余1
 System.out.println(-10%3);//-1 商-3 余-1
 System.out.println(-10%-3);//-1 商3  余-1
 System.out.println(11.5%2);//1.5 商5 余1.5 Java允许小数取余
 short sh=12;
 sh=sh+2;//会报错,因为2是int sh类型提升为4个字节无法赋给sh
 sh+=2;//不会报错,理解为帮我们进行了类型的强制转换

关系运算符

> >= < <= != ==

 1>=5;返回值是false
 System.out.println(3<a<100);//编译不通过,因为3<a为true.不能和100比

&& || !

1.表达式1&&表达式2

表达式1和表达式2都是布尔表达式,要么是true要么是false

如果表达式1为真,那么就去执行表达式2,如果表达式也为真,那么整体为真 如果表达式1为假,那么就不会执行表达式2,发生短路

1/0会报错,ArithmeticException:算数异常

:/ by zero 除0了

2.表达式1 || 表达式2

如果表达式1为真,就不执行表达式2.整体已经为真,发生短路

如果表达式1为假,就继续执行表达式2,表达式2为真,整体为真

 int a=0
 System.out.println(a==0|| (1/0)==0);//不会报错,因为不会执行1/0

3.逻辑非

!true=false

!false=true

&:按位与,如果左右都是布尔类型,也能当作逻辑与用,但不会出现短路情况

位运算符

1.&按位与

对应位按位取与

0000 1011 11 0000 1101 13 & =0000 1001

2.| 按位或

对应位按位取或

3.^ 按位异或

0010 1011 0001 1010 ^ =0011 0001 计算逻辑:对应位不一样就是1,一样就是0

  • 两个相同的数字异或结果是0

  • 0^任何数字=任何数字

  • 当&和 | 的操作数为整数的时候,表示按位运算,当操作数为布尔类型的时候,表示逻辑运算

4.按位取反~

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

移位运算符

1.<< 左移

0000 1011 <<1 11 =0001 0110 22=11*21

0000 1011 <<2 11 =0010 1100 44=11*22

  • x左移n位就相当于x乘2n

  • 左移补零

2.>>右移

0000 1011>>1 11 =0000 0101 5=11/21

  • 正数x右移n位就相当于x除2n

  • 右移补的是符号位

1111 1111>>1 =1111 1111

3.无符号右移>>>

1111 1111 >>>1 =0111 1111

  • 无符号右移统统补零

  • 没有无符号左移

4.注意

  • 计算机计算移位效率高于计算乘除,当某个代码正好乘除2的N次方的时候可以用移位运算代替

  • 移动负数位或者移位位数过大都没有意义

三目运算符

  • 布尔表达式1 ? 表达式2 : 表达式3

当表达式1为真的时候,返回表达式2,否则返回表达式3的结果

 System.out.println((true == true)?(true == true) ? false : true : true);//false
 //(true == true)表达式1
 //(true == true) ? false : true 表达式2
 //true  表达式3
 //表达式1为真,返回表达式2,表达式2又是个三目运算符
 //表达式2的三目运算符的返回值为false
  • 表达式2和表达式3的结果要是同类型的,除非能发生类型隐式类型转换

 int a=10;
 int b=20;
 int c=a>b?1:2.0//若返回的是2.0,则放生隐式类型转换
  • 表达式不能单独存在,其产生的结果必须要被使用

 int a=10;
 int b=20;
 a>b?a:b;//报错:Error:(15,14)java:不是语句
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值