Java基础(三)运算符详解

        我们知道在Java中,必不可少的就是运算符,那么常见的运算符都有哪些呢?Java中的运算符主要分为六种:算数运算符、赋值运算符、比较运算符、逻辑运算符、位运算符和三元运算符。下面我们来一一介绍一下。

目录

算数运算符

%取余运算:

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

+(连接符)

赋值运算符

关系运算符

逻辑运算符

&运算规则

|运算规则

!运算规则

^运算规则

&&运算规则

||运算规则

位运算符

&、|、^运算规则

~、<<、>>运算规则

三元运算符

求两个数的最大值

求三个数的最大值


算数运算符

        算数运算符主要包括:加(+)、减(-)、乘(*)、除(/)、取余(%)、自增(++)、自减(--)、连接符(+)。

        其中加减乘除我们都十分熟悉,就不一一详解了,不过需要注意的有几点:

1.计算机在进行计算时,同样是从左往右依次计算,不过会将括号中的当作一个整体。

2.当计算时有大类型参与运算,那么运算结果一定是大类型。比如:int a=10;byte b=20; 那么a+b的最终结果一定是int类型的。

3.当byte、short类型的数值进行运算时,会自动转为int类型。

4.需要注意的是,正数/0在程序中是会报异常的:ArithmeticException(算数异常)。

        我们主要来说一下其他几个:

%取余运算:

        我们知道,取余运算的结果是余数,比如a%b就算的是a除以b的余数,运算规则是a%b=a-(a/b)*b

例如:7%4=7-(7/4)*4=7-4=3

        同时,做取余运算时,先按正数进行取余,然后看%左边数字的符号,如果为正,结果为正,如果为负,那么结果为负。

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

        就相当于在自身原先的基础上自增或自减1。

        需要注意的是,i++和++i是不同的,当++在变量之前,则表示先自增,然后赋值,当++在变量之后,则表示先赋值,再自增,下面我们从代码来看这两个的区别:

         int a1=10;
         int a2=10;
         int b=a1++;
         int c=++a2;
         System.out.println(b);
         System.out.println(c);

        注意看,a1和a2都是10,那么我们让b和c一个等于a1++,一个等于++a2,结果为b=10,c=11。这就是因为a1是先将自己的值赋给了b,然后再进行自增运算,而a2是先进行自增运算,然后再将自己的值赋给c。所以会有这种差别。

+(连接符)

        在Java中,“+”有多种意思,当加号的两边有字符串的存在时,加号会变成连接符,将两端拼接起来成为一个新的字符串,而当两边都不为字符串时,加号就代表运算符。下面考一考大家,这两条语句分别输出什么呢? 

         System.out.println("hello"+1+5);
         System.out.println(1+5+"hello");

        这两个看上去是一样的,可是输出结果却不一样,第一个输出:hello15,第二个输出:6hello。

        有人会问了,为什么第一个不输出hello6?1和5明明不是字符串,+应该作为运算符才对啊。其实你忽略了一个很重要的要点,也是我们上面提到的注意事项的第一项,计算机进行计算时,是从左往右依次进行计算的,也就是说,计算机是把hello和1拼在一起之后,再让这个新的字符串+5,所以两个+都是连接符了。那如果我要让他输出hello6,怎么办呢?很简单,把1+5用括号括起来就好了,因为括号里的是一个整体。

        还有要注意的一点是,连接符仅对字符串类型生效,对char类型无效,比如我输出'a'+1,他就会输出98,因为他会自动根据a这个字符在字符集中的编号来运算。

赋值运算符

        赋值运算符右边十二种,=(等于)、+=(加等)、-=(减等)、*=(乘等)、/=(除等)、%=(取余等)、&=(与等)、|=(或等)、^=(异或等)、<<=(左移等)、>>=(右移等)、>>>=(无符号右移等)

        这是什么意思呢,打个简单的比方: A+=B 就等价于 A=A+B ,把A和B相加的值赋给A, 其他的赋值运算符同理。

        不过在Java中 A=B 一般不会称为A等于B,而是会称为把B的值赋给A或者令A等于B。

关系运算符

        关系运算符又称为比较运算符

        一共有七个运算符:==(等于)、!=(不等于)、>(大于)、<(小于)、>=(大于等于)、<=(小于等于)、instanceof(判断对象与实例的关系),他们返回的结果全部都是boolean类型

 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);

        他们的输出结果分别是:false、false、true、false

        在这里要注意a=b和a==b是不同的,前者是赋值,后者是比较。

逻辑运算符

        逻辑运算符有六种:&(与)、|(或)、!(非)、^(异或)、&&(短路与)、||(短路或),接下来我们一个一个介绍。

        逻辑运算符主要是连接boolean类型的表达式或者值,比如我们要表达一个数大于0并且小于10,那么我们就会用到x>0&x<10。

        下面我们看一下他们的运算规则:

&运算规则

        两端有一个false结果都为false

格式结果
false&falsefalse
false&truefalse
true&falsefalse
true&truefalse

        &也叫并且,我们可以这样来理解:

        考试合格的要求是卷面成绩大于60并且平时成绩大于60,我们可以表示为:卷面成绩>60&平时成绩>60

        那么这两个条件只要有一个没满足,考试就不合格,只有两个条件都满足,考试才合格。

|运算规则

        只要有一个true,结果就为true

格式结果
false&falsefalse
false&truetrue
true&falsetrue
true&truetrue

        |是或者的意思,A|B只要满足一个条件即可,用生活中的例子打个比方:我们要坐车,要么有核酸检测,要么有健康码和行程码,这两个条件只要满足一个,我们都可以坐车。

!运算规则

        用于否定条件:!true=false !false=true

        非否即是,非是即否

        偶数个不改变,原因很好理解,双重否定表肯定嘛

^运算规则

        两边相同为false,不同为true,“同性相斥、异性相吸”

        男 ^ 男为false、女 ^ 女也为false

        男 ^ 女为true

        这里借男女关系打个比方,方便大家理解。

&&运算规则

        &&的意思是短路与,他和&的运算规则是一模一样的,不过不同的是如果左边的值为false,那么右边的表达式就会被跳过,直接返回结果false。

        我们知道,&运算中,只要有一个false,那么最终的结果就为false,那么当&&左边的表达式已经为false,就表明最终的结果一定为false,那么右边的表达式是true还是false已经不重要了,所以直接跳过不运算,可以提高效率。我们在运算时,一般都会采用&&而非&。

||运算规则

        ||的意思是短路或,和|的运算规则也一样,同时他也是可以提高计算效率,不过和&&相反,只要左边为true,那么他就跳过右边的表达式,直接返回true,理由和&&一样,只要左边为true,那就代表结果一定为true,右边的表达式是什么已经不重要,所以直接跳过。

位运算符

        位运算符有:&(按位相与)、|(按位相或)、^(异或)、~(按位取反)、<<(按位左移)、>>(按位右移)

        注意:位运算是直接对二进制补码进行运算,故而效率会高一些。

&、|、^运算规则

        这些运算是用两个数的二进制的每一位进行比较,

        运算规则如下:

        &:有一个是0则为0

        |:有一个是1则为1

        ^:相同取0,不同为1

下面演示一下,我们用3和4分别进行运算:

先写出3和4的二进制数:

3:00000011 &(有0则0):00000011     |(有1则1):00000011 ^(同0异1):00000011

4:00000100                         00000100                            00000100                         00000100

                                结果 :   00000000:                        000000111:7                  00000111:7

        其中位异或运算符还有一个特点:一个数据被另一个数据异或两次,该数本身不变。

~、<<、>>运算规则

        这些运算是直接对单个数的计算

        运算规则如下:

        ~:0变1,1变0

        <<:左移,空位补0,被移除的高位丢弃 >>:右移,空缺位补0,最高位为1,高位补1,最高位为0,补0

        演示:

~3=00000011按照0变1,1变0为:11111100,注意这里的结果是补码,我们推算回原码为10000100,结果为-4

3<<=00000011,将11向左移2位,空位补0得:00001100,结果为12

3>>=00000011.将11向右移2位,被移除丢弃得:00000000.结果为0

        同时,我们要知道,<<的结果就是把<<左边的数乘以2的移动次幂 。例如3<< 结果 3* 2^2=12,举一反三,>>就是左边的数除以2的移动次幂,例如 40>>3 结果 40/2^3=5

三元运算符

三元运算符的格式为:(关系表达式)?表达式1:表达式2;

例如:int a=(10>20)?30:50; 结果为a=50;

也就是说,如果关系表达式的值为true,则运算后结果为表达式1,如果为false,则结果为表达式2

求两个数的最大值

用三元运算符可以求出两个数的最大值,用代码进行演示:

 int a=30;
 int b=50;
 int Max=a>b?a:b;

显然,a>b是不对的,返回false,那么运算结果为表达式2,也就是b,所以Max=50,即最大值。

进阶一下,我们改良代码可以算出三个数中的最大值:

求三个数的最大值

 int a=30;
 int b=50;
 int c=80;
 int i=a>b?a:b;
 int Max=i>c?i:c;

我们先用a和b比较,然后得到a和b的最大值,再用这个最大值和c比较,得出总的最大值。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值