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,要求:获取卡上每位数字的值,然后相加求和。
首先我们进行分析:
- 定义变量存放卡号信息
- 获取卡每位上的数字信息
- 定义变量存放值信息,相加求和
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?"老年":"青年");
运算符的优先级
运算符有不同的优先级,所谓优先级就是表达式运算中的运算顺序。