Java基础-运算符

算术运算符

算术运算符就是进行算术运算的,它包含:+,-,*,/,%,++,--
加减乘除我们都非常的了解,我们直接列举一段代码就明白了

int a = 10;
int b = 20;

System.out.println(a + b);//30
System.out.println(a - b);//-10
System.out.println(a * b);//200
System.out.println(a / b);//0

上述代码就是演示了加减乘除的结果,a+b为30,a-b为-10,a*b为200,但是a/b我们却得到了0,我们清楚的知道a/b的结果为0.5,但是程序却显示为0,这就涉及到类型转换的问题,我们的a和b都是int类型,所以它们的运算结果也是int类型,程序就只保留了整数部分,所以结果为0。

%就是取余数,我们还是利用代码来进行演示:

int a = 25;
int b = 10;

System.out.println(a % b);//5

本段代码的运行结果为5,%运算符的意思就是计算a除以b的余数,25/10=2......5

++是一个单目运算符,它对一个变量起作用,简称自增,就是在该变量的基础上加一并且对该变量重新赋值为计算后的结果。
--也是一个单目运算符,它对也是对一个变量起作用,简称自减,就是在该变量的基础上减一并且对该变量重新赋值为计算后的结果。
这两个单目运算符所放的位置也有不一样的结果,a++++a是有区别的,如果一句代码中只有a++或者++a,那么它们就是一样的,否则不一样,例子如下:

int a = 1;
int b = 1;

System.out.println(a++);//1
System.out.println(a--);//2
System.out.println(a);//1

System.out.println(++b);//2
System.out.println(--b);//1
System.out.println(b);//1

我们看到输出的a++是1,但是输出的a–却是2,再然后输出的a又是1,其实我们先输出的a++是只输出了a,而且是还没有进行自增后的a,所以是1,当他输出后,a的值就已经自增变成了2,所以a–输出的也是还未进行自减的a,结果为2,输出后,a自减,变成了1,所以后面输出的a为1。
我们看到输出的++b是2,但是–b是1,b也是1。我们对它进行分析,打印的++b结果是2,就是b先进行了自增,然后才打印输出,所以为2,–b也是,先自减为1,所以打印出1,后面b的输出为1。
自增自减的运算符放置的位置影响了它的运行,自增自减放在前面就先进行自增自减计算,放后面就后进行自增自减运算。

赋值运算符

在Java中,赋值运算符就是用来赋值的运算符,采用=,例如程序中的int a = 10;,就是把10这个值赋值给类型为int的变量a。

关系运算符

关系运算符包含:<,>,<=,>=,==,!=,关系运算符都属于双目运算符,它是用来计算两个变量之间的关系的,它的运算结果都为布尔值,要么是false要么是true。
<:小于
>:大于
<=:小于等于
>=:大于等于
==:等于
!=:不等于

int a = 1;
int b = 2;

System.out.println(a < b);//true
System.out.println(a > b);//false
System.out.println(a <= b);//true
System.out.println(a >= b);//false
System.out.println(a == b);//false
System.out.println(a != b);//true

我们可以看到a<b的值为true,因为a是小于b的,所以它的值为true真,反之a>b的值就为false假。a<=b,就是判断a小于或者等于b的,它的值为true真。a>=b就是判断a大于或者等于b的,它的值为false假。a==b,就是判断a是不是等于b,结果为false,就是a和b不相等,a!=b就是判断a是不是不等于b,结果为true。

逻辑运算符

逻辑运算符,顾名思义就是进行逻辑运算的符号,在博主看来,就是用来计算真和假的运算,它包含了与(&,&&),或(|,||),非(!)三个逻辑运算符。
与(and):与符号两边的都要是true,结果才为true,其它均为false。
或(or):或符号两位都是false,结果才为false,其它均为true。
非(not):true的非就是false,false的非就是true。

int a = 1;
int b = 2;

System.out.println((a > b) & (a < b));//false
System.out.println((a > b) && (a < b));//false
System.out.println((a < b) | (a > b));//true
System.out.println((a < b) || (a > b));//true
System.out.println(!(a > b));//true

接下来博主演示一下&和&&,还有|和||的区别:

int a = 1;
int b = 10;

System.out.println((a > b) & (a++ < b));//false
System.out.println(a);//2 表示上一句的a++起效了
System.out.println((a > b) && (a++ < b));//false
System.out.println(a);//2 表示上一句的a++无效
System.out.println((a < b) | (a++ > b));//true
System.out.println(a);//3 表示上一句的a++起效了
System.out.println((a < b) || (a++ > b));//true
System.out.println(a);//3 表示上一句的a++无效

其实上述代码的结果就已经展示了他们的不同,&和&&都是与运算,后者又可以叫做短路与运算符,&不论怎样都会对两边的代码都执行,但是&&在遇到左边结果为false时,就不会再执行右边的代码,直接返回结果false,我们明白,在进行与运算的时候,需要两边都是true时,结果才为true,其他结果都是false,这样遇到左边是false时,就能判断出结果一定为false,所以没有必要对右边的代码执行,这样的效率更高。
同理,|和||都是或运算,后者也可以叫做短路或,|不论在什么情况下,两边的代码都会执行,但是||在遇到左边为true的时候,直接就返回结果为true,右边的代码就不会被执行。
所以,上面的代码就得到了自然的解释。

位运算符

位运算符包括:&,|,^,~,>>,<<,>>>,这些运算符主要是对二进制的数进行操作,我们知道,计算机中对数据的存储就是二进制的,这些运算符对二进制的数进行直接操作,所以它的效率比普通的运算效率要高一些。
&:与,只有1&1结果才是1,其余结果为0。
|:或,只有0|0结果才为0,其余结果都为1。
^:异或,相同为0,不同为1。
~:非,~0为1~1为0
<<:左移运算符,将运算符左边的对象向左移动运算符右边指定的位数,在低位补0。
>>:"有符号"右移运算符,将运算符左边的对象向右移动运算符右边指定的位数。使用符号扩展机制,也就是说,如果值为正,则在高位补0,如果值为负,则在高位补1。
>>>:"无符号"右移运算符,将运算符左边的对象向右移动运算符右边指定的位数。采用0扩展机制,也就是说,无论值的正负,都在高位补0。

int a = 0b10111111;//191的二进制
int b = 0b11001101;//205的二进制

//结果为141 二进制10001101
System.out.println(a&b);

//结果为255 二进制11111111
System.out.println(a|b);

//结果为114 二进制01110010
System.out.println(a^b);

//结果为-206 二进制11111111111111111111111100110010
System.out.println(~b);

//结果为764 二进制1011111100 后面多了两个0
System.out.println(a<<2);

//结果为51 二进制110011 后面少了01
System.out.println(b>>2);

//二进制11111111 11111111 11111111 11111111
int c = -1;
//二进制00000000 00000000 00000000 00000001
int d = 1;

//结果为2147483647 二进制01111111 11111111 11111111 11111111
//在原来数的基础上将所有的数向右移动一位,在首位加了0
System.out.println(c>>>1);

//结果为-1 二进制11111111 11111111 11111111 11111111
//在原来数的基础上将所有的数向右移动一位,本数为负数,所以在首位加了1
System.out.println(c>>1);

//结果为0 二进制00000000 00000000 00000000 00000000
//在原来数的基础上将所有的数向右移动一位,在首位加了0
System.out.println(d>>>1);

//结果为0 二进制00000000 00000000 00000000 00000000
//在原来数的基础上将所有的数向右移动一位,本数为正数,所以在首位加了0
System.out.println(d>>1);

我们发现程序所运行的结果与我们的理论一致,其实细心的朋友会发现,这个正好也对应了int的取值范围,我们知道int占了4个字节,就是32为二进制数,所以我们在对int类型的二进制数操作时,有的地方就会直接产生误差。

条件运算符

条件运算符就是我们常使用的三目运算符,它能够简化if~else语句,它的基本结构为a?b:c,a为判断语句其返回的结果为布尔值,就是如果a为true,则运行b,否则运行c。

int score1 = 60;
String grade1 = score1 < 60 ? "不及格" : "及格";
System.out.println(grade1);//及格

int score2 = 59;
String grade2 = score2 < 60 ? "不及格" : "及格";
System.out.println(grade2);//不及格

扩展赋值运算符

扩展的运算符就是简化后的运算符,其包含+=, -=, *=, /=, %=,我们举一段程序为例:

int a = 10;

a += 2;//相当于a = a + 2
System.out.println(a);//12

a -= 1;//相当于a = a - 1
System.out.println(a);//11

a *= 3;//相当于a = a * 3
System.out.println(a);//33

a /= 3;//相当于a = a / 3
System.out.println(a);//11

a %= 10;//相当于a = a % 10
System.out.println(a);//1

如若发现博主有些写的不对的地方,还望多多包含,多多指出,相互交流,共同提升。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值