Java基础知识之算术运算符、关系运算符、逻辑运算符(重点)、位运算符、移位运算符、条件运算符

一、算术运算符

1.基本四则运算符“ + - * / %”

(1)两个int类型相除结果还是 int, 需要使用 double 来计算,如下代码所示:

int m = 6;
int n = 4;
System.out.println(m/n);//运行结果为1

(2)0不能作为除数,如果0作为除数则会出现算数异常,如下所示:

int m = 2;
int n = 0;
System.out.println(m/n);

运行结果:
在这里插入图片描述
(3)% 表示取余, 可以对int和double求模。

System.out.println(6 % 4);
System.out.println(6.3 % 2.1);

运行结果:
在这里插入图片描述

2.增量赋值运算符 “+= -= *= /= %=”

int m = 1, n = 2, o = 3, p = 4, q = 5;
m += m;//相当于m=m+m,下列同理
n -= 1;
o *= o;
p /= 4;
q %= 4;
System.out.println("m="+m+",n="+n+",o"+o+",p="+p+",q="+q);

运行结果:
在这里插入图片描述

3.自增/自减运算符 ++ –

int m = 23;
int n = m++;//m的值先赋给n,再自加一,故n的值为23,m的值为24
System.out.println(n);
System.out.println(m);
int a = ++m;//m的值先自加1再赋值给a,故a的值为25
System.out.println(a);

运行结果:
在这里插入图片描述
结论:

  1. 如果不取自增运算的表达式的返回值, 则前置自增和后置自增没有区别。
  2. 如果取表达式的返回值, 则前置自增的返回值是自增之后的值, 后置自增的返回值是自增之前的值。

二、关系运算符

关系运算符主要有六个:== != < > <= >=,表达式返回值都是 boolean 类型。

int m = 23;
int n = 25;
System.out.println(m == n);//运行结果:false
System.out.println(m != n);//运行结果:true
System.out.println(m < n);//运行结果:true
System.out.println(m > n);//运行结果:false
System.out.println(m <= n);//运行结果:true
System.out.println(m >= n);//运行结果:false

三、逻辑运算符(重点)

逻辑运算符主要有三个:&& || !,逻辑运算符的操作数(操作数往往是关系运算符的结果)和返回值都是 boolean。

1.逻辑与 &&

两个操作数均为true,结果为true。否则有一个操作数为fasle,则结果为false。

int m = 23;
int n = 25;
System.out.println(m != n && m < n);//m!=n结果为true,m<n结果为true,故运行结果:true
System.out.println(m == n && m > n);//同理,运行结果:false

2.逻辑或 ||

两个操作数均为false,结果为false。否则有一个操作数为true,结果为true。
如下列代码:
在这里插入图片描述
运行结果:
在这里插入图片描述

3.逻辑非 !

顾名思义,操作数为 true, 则结果为 false,反之亦然(这是个单目运算符, 只有一个操作数)

int m = 23;
int n = 25;
System.out.println(! (m != n));//m!=n的结果为true,取非,则最终结果为false

4.短路求值

(1)&& 和 || 遵守短路求值的规则

System.out.println(23 > 25 && 23 / 0 == 9);//运行结果:false
System.out.println(23 < 25 || 23 / 0 == 5);//运行结果:true

如上代码,程序正常运行,我们知道在计算23 / 0会导致程序抛出异常,但上述代码却没有,说明23 / 0没有被求值。
如上,对于逻辑与&&,如果左侧表达式值为 false, 无需计算右侧表达式,则表达式的整体值是 false,。
对于逻辑或 ||, 如果左侧表达式值为 true, 无需计算右侧表达式,则表达式的整体值是 true。
(2)& 和 | 不支持短路求值(不推荐使用)
& 和 | 如果操作数为 boolean 的时候,也表示逻辑运算。

 System.out.println(23 > 25 & 23 / 0 == 9);
 System.out.println(23 < 25 | 23 / 0 == 5);

抛出异常显示:
在这里插入图片描述

四、位运算符

Java 中对数据的操作最小单位不是字节, 而是二进制位。位操作符有四个:& | ~ ^。
位操作表示按二进制位运算。计算机中都是使用二进制来表示数据的(01构成的序列), 按位运算就是在按照二进制位的每一位依次进行计算。

1.按位与&

如果两个二进制位都是 1,则结果为 1,否则结果为 0。进行按位运算, 需要先把 15 和 8 转成二进制, 分别为 1111和 1000。

int m = 15;
int n = 8;
System.out.println(m & n);//运行结果8

按位与如下图所示:
在这里插入图片描述

2.按位或 |

如果两个二进制位都是 0, 则结果为 0, 否则结果为 1。

int m = 13;
int n = 2;
System.out.println(m | n);//运行结果为15

当 & 和 | 的操作数为整数(int, short, long, byte) 的时候, 表示按位运算, 当操作数为 boolean 的时候, 表示逻辑运算。

3.按位取反~

如果该位为 0 则转为 1, 如果该位为 1 则转为 0。

int m = 0x1;
System.out.printf("%x\n", ~m);//运行结果:fffffffe

结论:

  1. 0x前缀的数字为 十六进制。十六进制可以看成是二进制的简化表示方式。一个十六进制数字对应 4 个二进制位。
  2. 0xf 表示 10 进制的 15, 也就是二进制的 1111。
  3. printf 能够格式化输出内容, %x 表示按照十六进制输出。

4.按位异或 ^

如果两个数字的二进制位相同, 则结果为 0, 相异则结果为 1。
如下列代码所示:

int m = 0x2;
int n = 0x6;
System.out.printf("%x\n", m ^ n);

五、移位运算(了解)

移位运算符有三个:<< >> >>>,都是按照二进制位来运算。

1.左移 <<

左移时,不分正负数,最左侧位不要, 最右侧补 0。并且移动位数超过该类型的最大位数会进行取模,如对Int型左移33位,实际上只移动1位。左移n位相当于乘以2的n次方。如下列代码,左移4位相当于乘以2的4次方:

int m = 1;
System.out.printf("%d\n", m << 4);//运行结果是16

2.右移 >>

右移时,最右侧位不要, 最左侧补符号位,如果该数为正,则高位补0,若为负数,则高位补1。右移 N 位, 相当于原数字除以2 的N次方。如下列代码所示:

int m = 0x18;
System.out.printf("%x\n",m >>1);//运行结果是c(十六进制输出)

3.无符号右移>>>

最右侧位不要, 最左侧补 0

int m = 0xffffffff;
System.out.printf("%x\n", m >>> 3);//运行结果是1fffffff(十六进制输出)

注:由于计算机的计算移位效率高于计算乘除,当某个代码正好乘除 2 的N次方时可以用移位运算代替,并且移动负数位或者移位位数过大都没有意义。

六、条件运算符

基本格式:

表达式1 ? 表达式2 : 表达式3

当表达式1 的值为 true , 整个表达式的值为表达式2的值;当表达式1的值为 false 时, 整个表达式的值为 表达式3 的值。它是 Java 中唯一的一个 三目运算符, 是条件判断语句的简化写法。

// 比较两个数的大小
int m = 23;
int n = 25;
int count = m > n ? m : n;
System.out.println(count);//运行结果是25

猜你喜欢

转载自blog.csdn.net/lolly114/article/details/127641521
今日推荐