【Java基础系列】第2章 数据类型和运算符(3)

2.7 运算符

2.7.1 算术运算符

 (1) +  -  *  /   %(求余)   ++(自加)   --(自减)

    + 加 比如:3+5=8 //还可做为连接符

- 减 比如:3-5=-2

   * 乘 比如:3*5=15

/ 除 比如:3/5=0

% 除之后取余数 比如:3%5=3

++ 自加 比如:a=3  a++后  a=4

-- 自减 比如:a=3  a--后  a=2

如:   5/2=2   (5和2都是整数时为2,取整数部分,因为两int运算,结果为int)

           5.0/2.0=2.5 (5.0和2.0是小数,那结果是小数2.5) 

            5%3=2       (%表示取余)

a=2;b=a++;   (运算后b是2,a是3)

a=2;b=++a;   (运算后b是3,a也是3)

(2) 指定保留的小数位数

BigDecimal 变量名=new BigDecimal(小数);

承载变量名=变量名.setScale(保留的小数位数,ROUND_HALF_UP).doubleValue();

2.7.2 赋值运算符

(1) 赋值:  =

(2) 与算术运算符联合用

赋值运算符可与算术运算符、位移运算符结合,扩展成功能更加强大的运算符。扩展后的赋值运算符如下:

+=: 对于x+=y, 即对应于x=x+y

-=: 对于x-=y, 即对应于x=x-y

*=: 对于x*=y, 即对应于x=x*y

/=: 对于x/=y, 即对应于x=x/y

%=: 对于x%=y, 即对应于x=x%y

&=: 对于x&=y, 即对应于x=x&y

|=: 对于x|=y, 即对应于x=x|y

^=: 对于x^=y, 即对应于x=x^y

如:①a+=5和②a=a+5数值是一样的,但千万要注意a的类型,①中a的类型不会 变,②中a的类型可以改变。

2.7.3 比较运算符

>          大于

<          小于

>=         大于等于

<=         小于等于

==         等于  (比较变量的物理地址,对比equals比较变量的值

!=         不等于

2.7.4 逻辑运算符

  1. &&    并且    计算时短路

(2) &     并且    计算时不短路

(3) ||    或者    计算时短路

(4) |     或者    计算时不短路

(5) !     否定的,相反的

(6)  ^    异或  比较^两边的逻辑运算结果,同则假,不同则真,计算时不短路

例1:

public class WithOrText{

public static void main(String[] args){

int oneNum=10;

int twoNum=38;

int threeNum=10;

int fourNum=38;

int fiveNum=62;

int sixNum=83;

int sevenNum=62;

int eightNum=83;

//短路与&&

System.out.println("-----------短路与&&-----------");

if(oneNum++>15&&twoNum++<20){

System.out.println("true:  oneNum:"+oneNum+"    twoNum:"+twoNum);

}else{

System.out.println("false:  oneNum:"+oneNum+"    twoNum:"+twoNum);

}

//非短路与&

System.out.println("-----------非短路与&----------");

if(threeNum++>30&fourNum++<50){

System.out.println("true:  threeNum  "+threeNum+"    fourNum:"+fourNum);

}else{

System.out.println("false:  threeNum  "+threeNum+"    fourNum:"+fourNum);

}

//短路或||

System.out.println("-----------短路或||-----------");

if(fiveNum++<90||sixNum++>50){

System.out.println("true:  fiveNum: "+fiveNum+"    sixNum:"+sixNum);

}else{

System.out.println("false:  fiveNum: "+fiveNum+"    sixNum:"+sixNum);

}

//非短路或|

System.out.println("-----------非短路或|----------");

if(sevenNum++<90|eightNum++>50){

System.out.println("true:  sevenNum: "+sevenNum+"    eightNum:"+eightNum);

}else{

System.out.println("false:  sevenNum: "+sevenNum+"   eightNum:"+eightNum);

}

}

}

例2:

使用逻辑运算符实现润年的计算,(润年:①能被4整除且不能被100整除的年份

                                          ②能被400整除的年份

public class LeapYear{

public static void main(String[] args){

int year=2016;

if(year%4==0&&year%100!=0||year%400==0){ //满足其中之一都是润年

System.out.println(year+"是润年");

}else{

System.out.println(year+"不是润年");

}

}

}

2.7.5 位运算

(1)“按位与”运算  &         有0出0       

00000000 00000000 00000000 00000101   =5

11111111 11111111 11111111 11111100   =-4

结果:

00000000 00000000 00000000 00000100   =4

(2)“按位或”运算  |         有1出1

00000000 00000000 00000000 00000011   =3

00000000 00000000 00000000 00000110   =6

结果:

00000000 00000000 00000000 00000111   =7

  1. “按位取反”运算 ~       所有的0修改为1   1修改为0

00000000 00000000 00000000 00000111   =7

结果:

11111111 11111111 11111111 11111000   =-8

  1. “按位异或”运算 ^       相同为0,不同为1

00000000 00000000 00000000 00001010   =10

00000000 00000000 00000000 00000011   =3

结果:

00000000 00000000 00000000 00001001   =9

  1. 移位操作

① <<   左移    一个数左移n位=这个数乘以2的n次方(2n)  4<<3 -> 4*23

② >>   右移    一个数右移n位=这个数除以2的n次方(2n)  8>>3 -> 8/23

③ >>>  无符号右移

位移总结(1)byte , short , char类型在做位移运算时,会自动提升数据类型为int

(2)int , long的数据在移动超出空间位值(32或64位)时,先给移动的位置  数除(32或64)后取余,余数就是移动的位数

(3)右移越界的数据都丢失,左边移出的空位,按原来符号位为1就全补1,否  则全补0。

2.7.6 三目运算符

(1)逻辑运算式? 值1:值2;

类型 名字=  逻辑运算式? 值1:值2;

//逻辑运算式如为true则得到值1,为false得到值2。获取的值需要定义变   

//量来承接,该变量的类型需要和值1、值2一样。

如:char c=3<4? ‘对’:‘ 错’    结果为 对

  1. 逻辑运算式?表达式1:表达式2;

            //逻辑运算式为true则运算表达式1,否则运算表达式2

  1. 逻辑运算式?逻辑运算式?表达式1:表达式2:表达式3;

              注:多重三目运算嵌套,从右往左的顺序运算

2.7.7 运算符优先级表

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

__Yvan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值