【Java篇】算术如诗,逻辑似梦:Java 编程中的运算符探寻

文章目录

    • [Java 运算符:在计算与逻辑之中追寻编程的哲理](#Java 运算符:在计算与逻辑之中追寻编程的哲理)
    • 1.前言
    • [2. 算术运算符](#2. 算术运算符)
      • [2.1 基本四则运算符:加减乘除(+ - * / %)](#2.1 基本四则运算符:加减乘除(+ - * / %))
      • [2.2 除法与取余](#2.2 除法与取余)
      • [2.3 增量运算符(++ --)](#2.3 增量运算符(++ --))
      • [2.4 自增/自减运算符](#2.4 自增/自减运算符)
    • [3. 关系运算符](#3. 关系运算符)
      • [3.1 关系运算符](#3.1 关系运算符)
    • [4. 逻辑运算符(重点)](#4. 逻辑运算符(重点))
      • [4.1 逻辑与 &&](#4.1 逻辑与 &&)
      • [4.2 逻辑或 ||](#4.2 逻辑或 ||)
      • [4.3 逻辑非 !](#4.3 逻辑非 !)
      • [4.4 短路求值](#4.4 短路求值)
    • [5. 位运算符](#5. 位运算符)
      • [5.1 按位与 &](#5.1 按位与 &)
      • [5.2 按位或 |](#5.2 按位或 |)
      • [5.3 按位取反 ~](#5.3 按位取反 ~)
      • [5.4 按位异或 ^](#5.4 按位异或 ^)
    • [6. 移位运算符(了解)](#6. 移位运算符(了解))
      • [6.1 左移 << : 最左侧位不要,最右侧补 0](#6.1 左移 << : 最左侧位不要,最右侧补 0)
      • [6.2 右移 >> : 最右侧位不要,左侧补符号位](#6.2 右移 >> : 最右侧位不要,左侧补符号位)
      • [6.3 无符号右移 >>> : 最右侧位不要,左侧补 0](#6.3 无符号右移 >>> : 最右侧位不要,左侧补 0)
    • 六、条件运算符
      • [6.1 什么是条件运算符?](#6.1 什么是条件运算符?)
    • 七、运算符的优先级
    • 八、总结与展望

Java 运算符:在计算与逻辑之中追寻编程的哲理

💬 欢迎讨论:如果你在阅读过程中有任何疑问或想要进一步探讨的内容,欢迎在评论区留言!我们一起学习、一起成长。

👍 点赞、收藏与分享:如果你觉得这篇文章对你有帮助,记得点赞、收藏并分享给更多想了解 Java 编程的朋友!

🚀 继续学习之旅 :今天,我们将继续深入 Java 编程的核心基础,介绍运算符,这些是每个学习 Java 的人都需要掌握的基本概念,后续我们将继续深入其他更高级的内容。


1.前言

在本篇文章中,我们将详细介绍 Java 中的运算符。运算符是构建程序的基石之一,它们决定了数据如何进行计算与转换。通过掌握 Java 中的各种运算符,你将能够在编程中灵活运用它们,编写出高效且简洁的代码。

Java 提供了丰富的运算符,涵盖了从简单的算术运算到复杂的位运算、逻辑运算等多个方面,掌握它们是每位 Java 程序员的必修课。


2. 算术运算符

2.1 基本四则运算符:加减乘除(+ - * / %)

java 复制代码
int a = 20;
int b = 10;
System.out.println(a + b); // 30
System.out.println(a - b); // 10
System.out.println(a * b); // 200
System.out.println(a / b); // 2
System.out.println(a % b); // 0 --> 计算a除以b后的余数

注意:

  • 都是二元运算符,使用时必须要有左右两个操作数
  • int 结果是整数类型,并且会向下取整。

2.2 除法与取余

java 复制代码
int a = 3;
int b = 2;
// 在数学中应该是1.5,但在Java中输出结果为1,会向下取整,即小数点之后全部舍弃掉了
System.out.println(a / b); 
// 如果要得到数学中的结果,可以使用如下方式
double d = a * 1.0 / b;
System.out.println(d);  // 1.5
  • 做除法和取模时,右操作数不能为0:
java 复制代码
int a = 1;
int b = 0;
System.out.println(a / b);  // 会抛出异常:ArithmeticException: / by zero
  • % 不仅可以对整数取模,也可以对double类型取模,但其实木有啥意义:
java 复制代码
System.out.println(11.5 % 2.0); // 1.5

2.3 增量运算符(++ --)

java 复制代码
int a = 1;
a += 2;  // 相当于 a = a + 2
System.out.println(a);  // 输出:3

a = 1;
a -= 1;  // 相当于 a = a - 1
System.out.println(a);  // 输出:0

a += 3;  // 相当于 a = a + 3
System.out.println(a);  // 输出:3

a /= 3;  // 相当于 a = a / 3
System.out.println(a);  // 输出:1

注意: 只有变量才能使用增量运算符,常量不能使用。

特别注意:

java 复制代码
a += 1.2;//合法的,但是结果是a+1,说明+=会自己先隐式转换
a = a + 1.2;//不合法,大类型转换小类型必须显示转换

2.4 自增/自减运算符

java 复制代码
int a = 1;
System.out.println(++a);  // 输出:2 --> 先自增,再打印
System.out.println(a++);  // 输出:2 --> 先打印,再自增

注意:

  • 如果是自增(++)或自减(--),操作的是变量的值,会先增减再返回或先返回再增减,具体看前置还是后置,这部分C语言已经讲过很多了,就不赘述了。

3. 关系运算符

3.1 关系运算符

关系运算符主要有六个:==!=><>=<=,其计算结果是 truefalse

java 复制代码
int a = 10;
int b = 20;
System.out.println(a == b); // false
System.out.println(a != b); // true
System.out.println(a > b);  // false
System.out.println(a < b);  // true
System.out.println(a >= b); // false
System.out.println(a <= b); // true

注意:

  • 关系运算符的结果通常用于控制判断,判断条件是否成立。

  • 如果使用 == 比较对象时,需要确保对象的内容相等,而不是地址相等。


4. 逻辑运算符(重点)

4.1 逻辑与 &&

语法规则:表达式1 && 表达式2,左右表达式必须是 boolean 类型的结果。

相当于现实生活中的例子,比如:如果是学生,并且带有学生证才可以享受半票。

两个表达式都真,结果才是真,只要有一个是假,结果就是假。

表达式1 表达式2 结果
java 复制代码
int a = 1;
int b = 2;
System.out.println(a == 1 && b == 2); // 左为真 且 右为真,则结果为真
System.out.println(a == 1 && b > 100); // 左为真 但 右为假,则结果为假
System.out.println(a > 100 && b == 2); // 左为假 且 右为真,则结果为假
System.out.println(a > 100 && b > 100); // 左为假 且 右为假,则结果为假

4.2 逻辑或 ||

语法规则:表达式1 || 表达式2,左右表达式必须是 boolean 类型的结果。

相当于现实生活中的例子,比如:买房子交钱,全款或者 按揭都可以,如果全款或者按揭,房子就是你的,否则站一边去。

表达式1 表达式2 结果
java 复制代码
int a = 1;
int b = 2;
System.out.println(a == 1 || b == 2);  // 左为真 且 右为真,则结果为真
System.out.println(a == 1 || b > 100); // 左为真 但 右为假,则结果为真
System.out.println(a > 100 || b == 2); // 左为假 且 右为真,则结果为真
System.out.println(a > 100 || b > 100); // 左为假 且 右为假,则结果为假

注意: 左右表达式至少有一个为真,则结果为真。


4.3 逻辑非 !

语法规则:! 表达式,取反。

表达式 结果
java 复制代码
int a = 1;
System.out.println(!(a == 1));  // a == 1 为 true,取反则为 false
System.out.println(!(a == 1));  // a == 1 为 true,取反则为 true

4.4 短路求值

&&|| 遵循短路求值的规则。

java 复制代码
System.out.println(10 > 20 && 10 / 0 == 0); // 打印 false
System.out.println(10 > 20 || 10 / 0 == 0); // 打印 true

注意:

  • 对于 &&,如果左边表达式为 false,则右边表达式无需执行。
  • 对于 ||,如果左边表达式为 true,则右边表达式无需执行。

5. 位运算符

Java 中数据操作的最小单位是字节,而数据操作的最小单位是比特位。字节是最小的存储单位,每个字节是由8个二进制位组成的,多个字节组合在一起可以表示不同和不同的数据。

位运算符主要有:&|^。除这三种运算符外,其余都是二元运算符。

5.1 按位与 &

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

java 复制代码
int a = 10;
int b = 20;
System.out.println(a & b);  // 输出 30

进行按位运算,需要先把 10 和 20 转成二进制,分别为 1010 和 10100。

10 的二进制 20 的二进制 0 的二进制
00001010 00010100 00000000

5.2 按位或 |

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

java 复制代码
int a = 10;
int b = 20;
System.out.println(a | b);  // 输出 30

运算方式和按位与类似。

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


5.3 按位取反 ~

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

java 复制代码
int a = 0xF;  // 十六进制数 0F,二进制是 1111
System.out.printf("%x\n", ~a);  // 输出 1111 的按位取反

5.4 按位异或 ^

如果两个二进制位相同,则结果为 0,相异则结果为 1。

java 复制代码
int a = 0x1;
int b = 0x1;
System.out.printf("%x\n", a ^ b);  // 输出 0

注意: 如果两个数相同,则异或的结果为 0。


6. 移位运算符(了解)

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

6.1 左移 << : 最左侧位不要,最右侧补 0

java 复制代码
int a = 0x10;
System.out.println("%x\n", a << 1);  // 输出结果(注意,是十六进制打印的)

注意: 向左移位,剩余的是符号位,所以正数左移可能会编程负数。

6.2 右移 >> : 最右侧位不要,左侧补符号位

java 复制代码
int a = 0x10;
System.out.println("%x\n", a >> 1);  // 输出结果:10
java 复制代码
int b = 0xffff0000;
System.out.println("%x\n", b >> 1);  // 输出结果:7fff8000

6.3 无符号右移 >>> : 最右侧位不要,左侧补 0

java 复制代码
int a = 0xFFFFFFF;
System.out.println("%x\n", a >>> 1);  // 输出结果:ffffffff

注意:

  1. 左移 1 位,相当于原数 * 2 的 N 次方。
  2. 右移 N 位,相当于原数 / 2 的 N 次方。
  3. 由于计算机的补码表示,符号位移时,计算方法不完全相同,某些代码修正后的移位运算在使用时需要注意。
  4. 移动负数位或者移位位数过大都没有意义.

六、条件运算符

6.1 什么是条件运算符?

条件运算符是 Java 中的三目运算符,它用于简化条件判断。其基本语法为:

java 复制代码
条件表达式 ? 表达式1 : 表达式2;

如果条件表达式为 true,则返回表达式 1 的值;否则,返回表达式 2 的值。

java 复制代码
int a = 10;
int b = 20;
int max = (a > b) ? a : b;
System.out.println(max); // 输出:20

注意:

  1. 表达式2和表达式3的结果要是同类型的,除非能发生类型隐式类型转换
  2. 表达式不能单独存在,其产生的结果必须要被使用

七、运算符的优先级

在一条表达式中,各个运算符可以混合使用进行运算,但是运算符的优先级不同,比如:*/ 的优先级要高于 +-,有些运算符下低不注意,可能就会造成很大的麻烦。

java 复制代码
// 求a和b和的平均值
int a = 10;
int b = 20;
int c = a + (b - a) >> 1;
System.out.println(c);

上述表达式中,由于 + 的优先级高于 >>,因此先和 b-a 的结果做加法,整体为 20,最后再进行右移,因此结果为 10。

修改如下:

java 复制代码
// 求a和b的平均值
int a = 10;
int b = 20;
int c = a + ((b - a) >> 1);
System.out.println(c);

注意: 运算符之间是有优先级的。具体的规则我们不必记,在可能存在歧义的代码中加上括号即可。


八、总结与展望

本文详细介绍了 Java 中的各种运算符,包括算术运算符、关系运算符、逻辑运算符、位运算符、移位运算符、条件运算符以及运算符的优先级。掌握这些运算符能够帮助你更高效地进行编程并优化程序的运行效率。

在未来的文章中,我们将继续深入 Java 编程的其他方面,帮助你逐步成为 Java 编程高手。如果你有任何疑问,欢迎在评论区留言,我们一起讨论、一起进步!


以上就是关于【Java篇】算术如诗,逻辑似梦:Java 编程中的运算符探寻的内容啦,各位大佬有什么问题欢迎在评论区指正,或者私信我也是可以的啦,您的支持是我创作的最大动力!❤️

相关推荐
q***333712 小时前
oracle 12c查看执行过的sql及当前正在执行的sql
java·sql·oracle
小奶包他干奶奶14 小时前
Webpack学习——Loader(文件转换器)
前端·学习·webpack
小奶包他干奶奶14 小时前
Webpack学习——原理理解
学习·webpack·devops
励志成为美貌才华为一体的女子15 小时前
强化学习PPO和GRPO逻辑学习
学习
tobebetter952715 小时前
How to manage python versions on windows
开发语言·windows·python
meichaoWen15 小时前
【Vue3】vue3的全面学习(一)
前端·javascript·学习
FFF团团员90915 小时前
树莓派学习笔记3:LED和Button
笔记·学习
Y***h18715 小时前
第二章 Spring中的Bean
java·后端·spring
9***P33415 小时前
PHP代码覆盖率
开发语言·php·代码覆盖率
8***293115 小时前
解决 Tomcat 跨域问题 - Tomcat 配置静态文件和 Java Web 服务(Spring MVC Springboot)同时允许跨域
java·前端·spring