Java中的运算符

1、自增、自减运算

计算机进行计算时,先从内存取值存放到寄存器中,然后进行计算。
前自增、前自减在寄存器取值之前进行;后自增、后自减在寄存器取值之后进行。
在这里插入图片描述
前自增流程:x=1->++x(x=2)->寄存器取值(寄存器1=2)->++x(x=3)->寄存器2取值(寄存器2=3)->++x(x=4)->寄存器3取值(寄存器3=4)->寄存器的所有值相加得到寄存器4=9->赋值给z(z=9)
后自增流程:x=1->寄存器取值(寄存器1=1)->x++(x=2)->寄存器2取值(寄存器2=2)->x++(x=3)->寄存器3取值(寄存器3=3)->x++(x=4)->寄存器的所有值相加得到寄存器4=6->赋值给z(z=6)
自增、自减运算的优先级高于四则运算。
口诀:自增自减在前,先计算后赋值;自增自减在后,先赋值后计算。

2、四则算数运算

Java进行四则运算时,取整规则为向下取整
示例 :int x=3*6/10结果为1
Java进行四则运算的结果的精度,以计算式中最高精度为准。
示例:
float z=3*6/10结果为1.0
float z=3f*6/10结果为1.8
float z=(float)3*6/10 结果为1.8
float z = (float)(3*6/10) 结果为1.0
四则运算的优先级高于位移运算

3、加法运算

在Java中如果数字与数字相加,结果为加法算数运算结果;字符与字符相加或者字符与数字相加,结果仍为加法算数运算结果;如果是字符串与某个类型相加,则结果为字符串。
字符与字符、数字相加结果为数字,是因为计算时使用了字符对应的ASC码值进行计算。

 char a='A';
 char b='B';
 String c="A";
 System.out.println(a+b);// 结果为131
 System.out.println(a+10);// 结果为75
 System.out.println(a+c);// 结果为AA

4、位运算

Java中的位运算只能用于四大整型和字符型,即byte,int,short,long,char。位运算的运算符如下:
在这里插入图片描述

0000 0010 十进制数是2
0010 0000 十进制数是32
(1)按位与(&)计算后: 0000 0000 十进制数是0
(2)按位或(|)计算后: 0010 0010 十进制数是34
(3)异或运算(^)计算后:0010 0010十进制数是34
(4)按位取反(~):
原码:0000 0010 十进制的2 第三个正数(注意,0当作正数)
补码:1111 1101 十进制的-3 第三个负数
原码:0111 1111 127
补码:1000 0000 -128
补码,就是在正数的基础上按位求反,是基于原正数比如0000 0010 十进制2来进行计算和表示的,通过该正数2在正数中所在的序号3,得到该正数2是表达的第3个正数,对应的,它的补码,表示的是第3个负数-3。(正数从0往大计数,负数从-1往小计数,想象一个数轴在0和-1中间对折。)
计算一个Java中二进制负数的简单方法:按位取反得到正数的二进制表示,计算出结果,然后+1得到序号,再在前面加个负号,就是对应的负数。
(5)左位移(<<)与右位移(>>):
位移操作只能是整数位,位移计算之后的结果,默认使用int型进行表达,有时候需要对结果进行强转。
<< 左位移即按位左移,移动一位相当于乘以2的操作。
>> 右位移即按位右移,移动一位相当于除以2的操作。
位移之后的位置将以0补全,注意位移时的位溢出。
示例:
0000 0010 左位移1位,0000 0100 十进制数是4
0000 0010 左位移5位,0100 0000 十进制数是64
0000 0010 左位移6位,1000 0000 十进制数是-128
0000 0010 左位移7位,0000 0000 十进制数是0
0000 0010 右位移1位,0000 0001 十进制的1
0000 0010 右位移2位,0000 0000 十进制的0
右位移位溢出后再左移,结果依旧是0;对于int类型,左位移位移溢出变为0之后,继续左位移操作,则每左移n位,相当于结果加上2的n次方。
示例:
0000 0000 0000 0000 0000 0000 0000 0010
左移30位 1000 0000 0000 0000 0000 0000 0000 0000 十进制数是-2147483648
左移31位 0000 0000 0000 0000 0000 0000 0000 0000 十进制数是0
左移32位 0000 0000 0000 0000 0000 0000 0000 0000 十进制数是2
左移33位 0000 0000 0000 0000 0000 0000 0000 0000 十进制数是4

5、关系运算

关系运算用于八大基本类型的比较。需要注意的是,String等对象类型用==比较时比较的是内存地址,而不是值本身,如果要比较的话,用equals方法。
在这里插入图片描述
关系运算符优先级高于逻辑运算符(!除外)。

6、逻辑运算

在这里插入图片描述
逻辑与:当两个布尔表达式都为真时,则为真。
逻辑或:当两个布尔表达式都为假时,则为假。
逻辑非:对结果取反。
&&、||&、|的区别:
(1)逻辑或、逻辑与运算是短路运算,当逻辑或运算的第一个表达式是真时,可以直接得到结果为真,因此后续判断不再进行;当逻辑与的第一个表达式为假时,可以直接得到结果为假,因此后续判断不再进行。
(2)按位与以及按位或,会把所有的条件表达式都计算完成,再得到结果。
因此逻辑运算速度比按位运算更快。

7、三元运算

三元运算主要通过三元表达式实现,具体格式为:关系表达式?表达式1:表达式2
运算的流程:
首先判断关系表达式条件是否成立;
如果成立为true,那么将返回表达式1的值;
如果不成立为false,那么将返回表达式2的值。

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

int x = 5;
int y = 6;
boolean z = x = y ? true : false;

8、各个运算符的优先级

各个运算符的优先级如下,不必死记硬背,在使用的时候直接加括号就可以了。
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

梦里有阳光

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

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

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

打赏作者

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

抵扣说明:

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

余额充值