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

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

文章目录

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

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

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

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

1.前言

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

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


2. 算术运算符

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

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

注意:

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

2.2 除法与取余

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:
int a =1;int b =0;System.out.println(a / b);// 会抛出异常:ArithmeticException: / by zero
  • % 不仅可以对整数取模,也可以对double类型取模,但其实木有啥意义:
System.out.println(11.5%2.0);// 1.5

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

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

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

特别注意:

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

2.4 自增/自减运算符

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

注意:

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

3. 关系运算符

3.1 关系运算符

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

int a =10;int b =20;System.out.println(a == b);// falseSystem.out.println(a != b);// trueSystem.out.println(a > b);// falseSystem.out.println(a < b);// trueSystem.out.println(a >= b);// falseSystem.out.println(a <= b);// true

注意:

  • 关系运算符的结果通常用于控制判断,判断条件是否成立。
  • 如果使用 == 比较对象时,需要确保对象的内容相等,而不是地址相等。

4. 逻辑运算符(重点)

4.1 逻辑与 &&

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

相当于现实生活中的例子,比如:如果是学生,并且带有学生证才可以享受半票。
两个表达式都真,结果才是真,只要有一个是假,结果就是假。

表达式1表达式2结果
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结果
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 逻辑非 !

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

表达式结果
int a =1;System.out.println(!(a ==1));// a == 1 为 true,取反则为 falseSystem.out.println(!(a ==1));// a == 1 为 true,取反则为 true

4.4 短路求值

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

System.out.println(10>20&&10/0==0);// 打印 falseSystem.out.println(10>20||10/0==0);// 打印 true

注意:

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

5. 位运算符

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

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

5.1 按位与 &

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

int a =10;int b =20;System.out.println(a & b);// 输出 30

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

10 的二进制20 的二进制0 的二进制
000010100001010000000000
在这里插入图片描述

5.2 按位或 |

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

int a =10;int b =20;System.out.println(a | b);// 输出 30
在这里插入图片描述


运算方式和按位与类似。

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


5.3 按位取反 ~

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

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

5.4 按位异或 ^

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

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

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


6. 移位运算符(了解)

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

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

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

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

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

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

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

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

注意:

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

六、条件运算符

6.1 什么是条件运算符?

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

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

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

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

注意:

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

七、运算符的优先级

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

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

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

修改如下:

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

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


八、总结与展望

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

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


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

在这里插入图片描述

Read more

Qt与Web混合编程:CEF与QCefView深度解析

Qt与Web混合编程:CEF与QCefView深度解析

Qt与Web混合编程:CEF与QCefView深度解析 * 1. 引言:现代GUI开发的融合趋势 * 2. Qt与Web集成方案对比 * 3. CEF核心架构解析 * 4. QCefView:Qt与CEF的桥梁 * 5. 实战案例:智能家居控制面板 * 6. 性能优化策略 * 7. 调试技巧大全 * 8. 安全加固方案 * 9. 未来展望:WebComponent集成 * 10. 结语 1. 引言:现代GUI开发的融合趋势 在当今的桌面应用开发领域,本地GUI框架与Web技术的融合已成为不可逆转的趋势。Qt作为成熟的跨平台C++框架,与Web技术的结合为开发者提供了前所未有的灵活性: * 本地性能 + Web动态性 = 最佳用户体验 * 快速迭代的Web前端 + 稳定可靠的本地后端 * 跨平台一致性 + 现代UI效果 35%25%20%20%混合应用优势分布开发效率UI表现力跨平台性性能平衡 2. Qt与Web集成方案对比 方案优点缺点适用场景Qt WebEngine官方支持,

By Ne0inhk
前端异常捕获与统一格式化:从 console.log(error) 到服务端上报

前端异常捕获与统一格式化:从 console.log(error) 到服务端上报

🧑 博主简介:ZEEKLOG博客专家,「历代文学网」(公益文学网,PC端可以访问:https://lidaiwenxue.com/#/?__c=1000,移动端可关注公众号 “ 心海云图 ” 微信小程序搜索“历代文学”)总架构师,首席架构师,也是联合创始人!16年工作经验,精通Java编程,高并发设计,分布式系统架构设计,Springboot和微服务,熟悉Linux,ESXI虚拟化以及云原生Docker和K8s,热衷于探索科技的边界,并将理论知识转化为实际应用。保持对新技术的好奇心,乐于分享所学,希望通过我的实践经历和见解,启发他人的创新思维。在这里,我希望能与志同道合的朋友交流探讨,共同进步,一起在技术的世界里不断学习成长。 🤝商务合作:请搜索或扫码关注微信公众号 “ 心海云图 ” 前端异常捕获与统一格式化:从 console.log(error) 到服务端上报 引言 在前端开发中,异常监控是保证应用稳定性的重要一环。当用户遇到页面白屏、功能不可用等问题时,如果能及时收集到详细的错误信息(包括堆栈、

By Ne0inhk
惊叹数据结构之美,品味排序算法之妙:对计排、桶排的详细介绍

惊叹数据结构之美,品味排序算法之妙:对计排、桶排的详细介绍

大家好,这里是小编的博客频道 小编的博客:就爱学编程 很高兴在ZEEKLOG这个大家庭与大家相识,希望能在这里与大家共同进步,共同收获更好的自己!!! 本文目录 * 引言 * 正文 * 一、计数排序(Counting Sort) * 二、基数排序(Radix Sort) * 三、总结 * 快乐的时光总是短暂,咱们下篇博文再见啦!!!不要忘了,给小编点点赞和收藏支持一下,在此非常感谢!!! 引言 排序算法中的基数排序和计数排序都是非基于传统比较的排序方法,它们各自有着独特的实现原理和应用场景。下面小编将从代码实现的角度对这两种排序算法进行详细介绍。 那接下来就让我们开始遨游在知识的海洋! 正文 一、计数排序(Counting Sort) 原理概述: 计数排序是一种适用于元素范围较小的排序算法。它利用一个额外的计数数组来记录待排序数组中每个元素出现的次数,然后根据这些次数来确定每个元素在最终排序数组中的位置。 代码实现步骤: 1. 确定元素范围:找出待排序数组中的最小值和最大值,记为min和max。2. 创建计数数组:创建

By Ne0inhk
Flutter 三方库 collection — 鸿蒙应用全方位集合操作与算法增强利器,实现鸿蒙深度适配下的高效容器过滤与优先级队列实战全解析(适配鸿蒙 HarmonyOS Next ohos)

Flutter 三方库 collection — 鸿蒙应用全方位集合操作与算法增强利器,实现鸿蒙深度适配下的高效容器过滤与优先级队列实战全解析(适配鸿蒙 HarmonyOS Next ohos)

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net。 Flutter 三方库 collection — 鸿蒙应用全方位集合操作与算法增强利器,实现鸿蒙深度适配下的高效容器过滤与优先级队列实战全解析 前言 在鸿蒙(OpenHarmony)应用开发中,数据结构的选择往往决定了逻辑的成败。当标准的 List、Set、Map 无法满足更高级的需求(例如:需要一个自动按优先级排序的任务队列,或者需要判断两个深度嵌套的 Map 是否完全一致)时,开发者就需要引入更强大的集合支持。 collection 是 Dart 官方维护的最核心基础库之一。它不仅补充了大量缺失的容器类型(如 PriorityQueue、Heap),还为原生集合提供了极其丰富的扩展工具类(如 ListEquality、CanonicalizedMap)。在 Flutter for OpenHarmony 的底层架构实践中,它是处理复杂业务逻辑、优化检索效率的必备“基石”。 一、原理解析 / 概念介绍

By Ne0inhk