7.java运算符

一、运算符(operator)

运算时会自动向上转型,除了short和byte会自动转为int

​ Java运算符按功能可分为:算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符和条件运算符。

操作符 描述
+ 加法 - 相加运算符两侧的值
- 减法 - 左操作数减去右操作数
* 乘法 - 相乘操作符两侧的值
/ 除法 - 左操作数除以右操作数
取余 - 左操作数除以右操作数的余数
++ 自增: 操作数的值增加1
-- 自减: 操作数的值减少1

算术运算符

​ 算术运算符包括加(+)、减(-)、乘(*)、除(/)、取模(%)、自增(++)、自减(--),通过算术运算符完成对整型和浮点型数据的算术计算。

  • 若两个数据不是同类型,运算时较小容量的数据类型会自动向大容量数据类型转型,然后再进行计算。但是只有short、byte、char会自动转换为int型,然后再进行计算。
  • 同一类型的数据运算,结果的类型与参数的类型一致。因此计算时要考虑数据溢出的问题。
  • 关于++和--的示例如下,
int a = 4;
int b = 2;
int c = a++;
System.out.println(c);  //输出:4,此时++在变量名后面,因此先将a赋值给c,然后到下一行再执行a=a+1。
System.out.println(a);  //输出:5
int d = a--;
System.out.println(d);  //输出:5,此时--在变量名后面,因此先将a赋值给d,然后到下一行再执行a=a-1。
System.out.println(a);  //输出:4
int e = ++a;
System.out.println(e);  //输出:5,此时++在变量名前面,因此先执行a=a+1,然后再赋值给e。
System.out.println(a);  //输出:5
int f = --a;
System.out.println(f);  //输出:4,此时--在变量名前面,因此先执行a=a-1,然后再赋值给e。
System.out.println(a);  //输出:4
int g = a+++a+++a;
System.out.println(g);  //输出:15

//扩展 幂运算(2的3次方)
double h = Math.pow(2,3);	//此方法的返回值是double
System.out.println(h);		//输出:8.0

扩展:

int a = 1;
int b = 2;
System.out.println(a+b+"");	//输出:3。由于先执行了a+b,所以结果为字符串3
System.out.println(""+a+b);	//输出:12.由于先执行了""+a,此时会自动转型为字符串类型进行拼接。

关系运算符

下表为Java支持的关系运算符
表格中的实例整数变量A的值为10,变量B的值为20:

运算符 描述 例子
== 检查如果两个操作数的值是否相等,如果相等则条件为真。 (A == B)为假。
!= 检查如果两个操作数的值是否相等,如果值不相等则条件为真。 (A != B) 为真。
> 检查左操作数的值是否大于右操作数的值,如果是那么条件为真。 (A> B)为假。
< 检查左操作数的值是否小于右操作数的值,如果是那么条件为真。 (A <B)为真。
>= 检查左操作数的值是否大于或等于右操作数的值,如果是那么条件为真。 (A> = B)为假。
<= 检查左操作数的值是否小于或等于右操作数的值,如果是那么条件为真。 (A <= B)为真。

逻辑运算符

逻辑运算符有三种:与(&&)、或(||)、非(!)
下表列出了逻辑运算符的基本运算,假设布尔变量A为真,变量B为假

操作符 描述 例子
&& 称为逻辑与运算符。当且仅当两个操作数都为真,条件才为真。 (A && B)为假。
| | 称为逻辑或操作符。如果任何两个操作数任何一个为真,条件为真。 (A | | B)为真。
称为逻辑非运算符。用来反转操作数的逻辑状态。如果条件为true,则逻辑非运算符将得到false。 !(A && B)为真。
  • 短路运算。&&在运算时,如果前面为false,那么就不会执行后面的语句,这个行为称为短路。实例如下
int a = 4;
int b = 2;
boolean c = a<0 && (b++>0);
System.out.println(c);  //输出:false
System.out.println(b);  //输出:2。由于a不小于0,所以短路了,就不会执行后面的语句,因此b没有自增,还是2

位运算

位运算符有其中:&、|、^、~、<<、>>、>>>

位运算符作用在所有的位上,并且按位运算。假设a = 60,b = 13;它们的二进制格式表示将如下:

A = 0011 1100
B = 0000 1101
-----------------
A&B = 0000 1100		//两个都为1,结果为1。其余都是0。
A | B = 0011 1101	//只要有1个为1,结果为1。
A ^ B = 0011 0001	//两个相等为0,其余都为1。
~A= 1100 0011		//取反。
操作符 描述 例子
如果相对应位都是1,则结果为1,否则为0 (A&B),得到12,即0000 1100
| 如果相对应位都是 0,则结果为 0,否则为 1 (A | B)得到61,即 0011 1101
^ 如果相对应位值相同,则结果为0,否则为1 (A ^ B)得到49,即 0011 0001
按位取反运算符翻转操作数的每一位,即0变成1,1变成0。 (〜A)得到-61,即1100 0011
<< 按位左移运算符。左操作数按位左移右操作数指定的位数。 A << 2得到240,即 1111 0000
>> 按位右移运算符。左操作数按位右移右操作数指定的位数。 A >> 2得到15即 1111
>>> 按位右移补零操作符。左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充。 A>>>2得到15即0000 1111

扩展:

//如何计算2的三次方效率最高?2<<3
0000 0000 0000 0010		2
0000 0000 0000 0100		4
0000 0000 0000 1000		8
0000 0000 0001 0000		18
只需要将二进制的2中1所在的位置左移3位,就可以得到二进制的18。

赋值运算符

操作符 描述 例子
= 简单的赋值运算符,将右操作数的值赋给左侧操作数 C = A + B将把A + B得到的值赋给C
+ = 加和赋值操作符,它把左操作数和右操作数相加赋值给左操作数 C + = A等价于C = C + A
- = 减和赋值操作符,它把左操作数和右操作数相减赋值给左操作数 C - = A等价于C = C - A
* = 乘和赋值操作符,它把左操作数和右操作数相乘赋值给左操作数 C * = A等价于C = C * A
/ = 除和赋值操作符,它把左操作数和右操作数相除赋值给左操作数 C / = A,C 与 A 同类型时等价于 C = C / A
(%)= 取模和赋值操作符,它把左操作数和右操作数取模后赋值给左操作数 C%= A等价于C = C%A
<< = 左移位赋值运算符 C << = 2等价于C = C << 2
>> = 右移位赋值运算符 C >> = 2等价于C = C >> 2
&= 按位与赋值运算符 C&= 2等价于C = C&2
^ = 按位异或赋值操作符 C ^ = 2等价于C = C ^ 2
| = 按位或赋值操作符 C | = 2等价于C = C | 2

条件运算符/三元运算符

//数据类型 变量名 = 表达式 ? 变量值A :变量值B
variable x = (expression) ? valueA if true : valueB if false;
//如果表达式为真,那么值为A,否则为B

运算符优先级

注:
鸣谢《狂神说》,免费java学习地址:https://www.kuangstudy.com/

posted @ 2022-01-15 17:05  西敲  阅读(51)  评论(0)    收藏  举报