天天看点

javaSe语法基础之运算符

javaSe语法基础之运算符

  • 运算符概述
  • 算数运算符
  • 位运算符
  • 赋值运算符
  • 比较运算符
  • 逻辑运算符
  • 三目运算符(三元运算符)
  • 运算符的优先级

什么是运算符?

运算符用于执行程序代码运算,会针对一个以上操作数项目来进行运算。例如:2+3,其操作数是2和3,而运算符则是“+”。

算数运算符

运算符 运算 示例 结果
+ 正号 +3 3
+ 1+1 2
+ 字符串相加(拼接) “He”+“llo” Hello
- 负号 b = 4; -b -4
- 2-1 1
* 1*2 2
/ 2/2 1
% 取模 7%5 2
++ 自增:++在前,++在后 案例 -
- - 自减:- -在前,- - 在后 案例 -

++和- -案例:

++在前,先运算后取值(--在前同)
++在后,先取值后运算(--在后同)
a = 2 ; b = ++a ;
c = 2 ; d =c++;
e = 2 ; f = -- e;
i = 2 ; j = i -- ;
System.out.println(b);
System.out.println(d);
System.out.println(f);
System.out.println(j);
           
3
2
1
2
           

经典案例:

public class Test{
public static void main(String [] args){
	int a = 10;
	System.out.println(++a);
	System.out.println(a++);
	System.out.println(a);
	}
}
           
11
11
12
           

相关补充:

/

除:被除数不能为0;

%

:求余数 结果的正负取决于被除数,和被除数一致

算数运算符的案例:

会员卡号四位数1234,要求:获取卡上每位数字的值,然后相加求和。

首先我们进行分析:

  1. 定义变量存放卡号信息
  2. 获取卡每位上的数字信息
  3. 定义变量存放值信息,相加求和
public class Test{
public static void main(String [] args){
	//定义变量存放卡号
	int num = 1234;
	//获取卡每位上的数字信息
	//千位
	int qian = num / 1000;
	System.out.println(qian);
	//百位
	int bai = num / 100%10;
	System.out.println(bai);
	//十位
	int shi = num%100/10;
	System.out.println(shi);
	//个位
	int ge = num %10;
	System.out.println(ge);
	//定义sum,相加求和
	int sum = qian+bai+shi+ge;
	System.out.println(sum);
	}
}
           
1
2
3
4
10
           

位运算符

所有数据在计算机内存中都是以二进制的形式进行存储的,位运算符直接操作二进制,所以它是高效的。

位运算符:两类7个。

运算符名称 计算运算符
按位与 &
按位或 |
按位异或 ^
取反 ~
运算符名称 移位运算符
左移 <<
(有符号)右移 >>
(无符号)右移 >>>

位运算符的使用仅用于整数

byte short int long char(无符号)

案例

&:与运算,当参与运算的两边都是1的时候,为1,否则为0

System.out.println(1&0);//0
System.out.println(1&1);//1
System.out.println(0&1);//0
System.out.println(0&0);//0
           

|:或运算,有1为1,否则为0

System.out.println(1|0);//1
System.out.println(1|1);//1
System.out.println(0|1);//1
System.out.println(0|0);//0
           
另外两个可以参照上面的案例
^:异或运算,不同为1,否则为0
~:反码,0为1,1为0

移位解析

移位 = 0b(高位)10001010(低位)
 00000001
00000001?//左移一位
000000010//?位置添0
           
public class Test{
public static void main (String [] args){
	byte i = 1 ; 			//0b 0000 0001
	i = (byte)(i<<1);	//0b 0000 0010
	System.out.println(i);
	}
}
           

输出结果为:

2

左移可能改变变量符号:

正数变负数
byte b = 127; //127=0b01111111
b=b<<1; //b=0b11111110=-2
负数正数
byte b = -128; // 127 = 0b1000_0000
b=b<<1; //b=0b0000_0000=0
           

有符号右移

>>

规则为高位向低位移动

二进制数向右移动对应的位数,如果这个数是

正数则高位补0

,反之

负数补1

有符号右移不改变该值的正负

无符号右移

>>>

规则为高位向低位移动

二进制数向右移动对应的位数,低位舍弃,

不管该数为正负

,其

高位都补0

无符号右移会把负数变成正数,但是正数还是正数

赋值运算符

运算符 运算 运算结果
+= a+=1 a=a+1
-= a-=1 a=a-1
/=
*=
=

同上方式;

案例1:

int c = 20 ,d = 30;
c - = d;
System.out.println(c);
           

请问这个

c-=d;

展开来写是什么?

c=c-d
           

这里要注意的是很多人会写成

d-c

这是错误的。

案例2:

探讨

+=(-=...)

这类运算符的自动转换(强制类型转换)

short s = 3;
s=s+2;	①
s+=2;	②
           

①和②有什么区别?

s=s+2报错,因为s为short,2是int类型,需要强制转换
s=(short)(s+2);
s+=2,被强制转换成int了,所以没有报错。
           

比较运算符(关系运算符)

运算符 运算 示例 结果
== 相等于 4==3 false
!= 不等于 4!=3 true
< 小于 4<3 false
> 大于 4>3 true
<= 小于等于 4<=3 false
>= 大于等于 4>=3 true
instanceof 检查是否是类的对象 “Hello” instanceof String true

比较运算符的结果都是

boolean

类型,也就是说要么是true,要么是false;

注意点:

==

不能写成

=

逻辑运算符

逻辑运算符主要用在多个条件之间的比较。

运算符 意义
& 逻辑与:两边为真,结果为真,否则都为假
&& 短路与:只要左边为假,右边就不参与判断了,结果直接返回假
| 逻辑或:只要一个条件为真,结果为真
|| 短路或:只要一个条件为真,右边不参与判断,结果直接返回真
! 逻辑非:取反
^ 逻辑异或:两边同真或同假,结果为为false,两边不同结果为true

案例举一反三:

a=3 && b = 2;
就是要满足a为3,b为2.才为true
           

补充逻辑非

!

!取反
!true=false;
!false=true
           

补充逻辑异或

^

逻辑异或:两边同真或同假,结果为为false,两边不同结果为true
           

所有逻辑运算符关系表如下

a b a&b a|b !a a^b a&&b a||b
true true ture true false false true true
true false false true false true false true
false true false true true true false true
false false false false true false false false

三目运算符(三元运算符)

格式:

(条件表达式)?表达式1:表达式2;

如果条件表达式为true,就输出打印表达式1的内容

如果条件表达式为false,就输出打印表达式2的内容

注意点:当三目表达式的结果给一个变量的时候,表达式1和表达式2为同一个结果类型。三目表达式可以嵌套使用,嵌套次数没有限制,但是不建议使用(因为结构体不清晰,代码的可读性降低)。

案例(获取两个数字中的最大值)

int a =10,b = 20 ;
System.out.println(a>b?a:b);
//a大于b吗?如果大于输出a,否则输出b
           

案例(判断中老年)

如果年龄小于18岁,输出未成年

如果年龄大于55岁,输出老年

否则输出青年

int age = 56;
System.out.println(age<18?"未成年":age>55?"老年":"青年");
           

运算符的优先级

运算符有不同的优先级,所谓优先级就是表达式运算中的运算顺序。