运算符(Java语言)
- 算数运算符
- 除法——/
- 取余——%
- 关系运算符
- 逻辑运算符
- 逻辑与——&&
- 逻辑或——||
- 非——!
- 短路
- 位运算符
- 按位与——&
- 按位或——|
- 按位异或——^
- 按位取反——~
- 移位操作符
- 左移操作符——<<
- 右移操作符——>>
- 无符号右移——>>>
- 条件运算符
算数运算符
我们所熟知的算数运算符包括:+,-,*,/,%,运算规则比较简单,值得注意的是除法
除法——/
举个例子:
public static void main(String[] args) {
int a = 1;
int b = 2;
System.out.println(a/b);
}
同样跟C语言一样,整数与整数相除结果得到的是整数,所以结果为0,而不是0.5。当然还有一点就是除数不能是0。
public static void main(String[] args) {
int a = 1;
int b = 0;
System.out.println(a/b);
}
我们可以看到,除数如果是0,结果直接会报错,因此我们在进行除法运算时除数是不能为0的。
取余——%
取余的运算同样不复杂,只是需要我们能够细心。我们来看一个例子:
public static void main(String[] args) {
System.out.println(10%3);
System.out.println(10%-3);
System.out.println(-10%3);
System.out.println(-10%-3);
}
大家都会去求第一个取余结果,但是负数同样可以参加取模运算,所以遇到负数取余就跟初高中一样运算就好了,以第四个为例,-10除以-3商数为3,余-1,因此结果为-1。
关系运算符
关系运算符主要有六个:==,!=,<,>,<=,>=
我们来看一个例子:
public static void main(String[] args) {
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);
System.out.println(a <= b);
System.out.println(a >= b);
}
从结果可以看到,使用一个关系运算符,得到的结果是布尔类型的值(true或者false)。当然不仅如此,在后期认识if()语句时,括号内的也只能是布尔类型的表达式。所以在Java中用if(0)是不可以的。
逻辑运算符
逻辑与——&&
基本表达:表达式1&&表达式2
注:这两个表达式都只能是布尔类型的表达式。
注意点:如果表达式1为假,就不执行表达式2了
逻辑或——||
基本表达:表达式1||表达式2
注:这两个表达式都只能是布尔类型的表达式。
注意点:如果表达式1为真,就不执行表达式2了。
非——!
基本表达:!(表达式)
注:表达式只能为布尔类型的表达式。
短路
关于短路,举个例子:
public static void main(String[] args) {
System.out.println(10 > 20 && 10 / 0 == 0);
System.out.println(10 < 20 || 10 / 0 == 0);
}
我们知道,除数是不能为0的,但是在这段代码中,并没有报错,原因就在于在判断10>20时,已经为假了,所以并不会执行后面的语句,同理,下面10=<20已经为真,并不会执行后面的语句。所以并不会报错。
位运算符
按位操作按的位是二进制位,因此我们在进行按位运算时,要将数的大小按照二进制位写出来。
按位与——&
原则:对应比特位都为1才为1,否则为0。
例子:
0000 1010
0010 0111
结果:0000 0010
按位或——|
原则:对应比特位都为0才为0,否则为1。
例子:
0000 1011
0100 0111
结果:
0100 1111
按位异或——^
原则:对应比特位一样的是0,不一样的为1。
例子:
0000 1011
0110 1110
结果:
0110 0101
按位取反——~
原则:对应比特位取反,0取1,1取0。
例子:
0000 1011
结果:
1111 0100
移位操作符
移位操作符包含三个:<<(左移),>>(右移),>>>(无符号右移)
左移操作符——<<
原理:二进制位向左移动x位,空出的位置补0。
例子1:
0000 1011<<1
结果:
0001 0110
例子2:
0000 1011<<2
结果:
0010 1100
右移操作符——>>
原理:二进制位向右移动x位,空出的位置补符号位(正数补0,负数补1)。
例子1:
0000 1011>>1
结果:
0000 0101
例子2:
0000 1011>>2
结果:
0000 0010
例子3:
1111 1111>>1
结果:
1111 1111
无符号右移——>>>
原理:二进制位向右移动x位,空出的位置补0。
例子:
1111 1111>>>1
结果:
0111 1111
从原理我们就可以发现,因为只有右移可能需要考虑符号位,而左移并不需要考虑符号位,所以没有无符号左移!!!
条件运算符
条件运算符只有一个:
表达式1?表达式2:表达式3,这个运算符同样在C语言中也同样存在,当表达式1 的值为 true 时, 整个表达式的值为 表达式2 的值; 当 表达式1 的值为false 时, 整个表达式的值为 表达式3 的值。
关于运算符的知识就是这么多了,大部分在C语言部分都已经了解过了,当然如果有什么建议也可以提出来,欢迎各位私信。谢谢大家!