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

文章目录

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

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

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

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

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


1.前言

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

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


2. 算术运算符

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

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 除法与取余

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 + 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

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

特别注意:

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); // 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结果
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,取反则为 false
System.out.println(!(a == 1));  // a == 1 为 true,取反则为 true

4.4 短路求值

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

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。

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,二进制是 1111
System.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 编程中的运算符探寻的内容啦,各位大佬有什么问题欢迎在评论区指正,或者私信我也是可以的啦,您的支持是我创作的最大动力!❤️
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/982860.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Ae 效果详解:VR 转换器

Ae菜单&#xff1a;效果/沉浸式视频/VR 转换器 Immersive Video/VR Converter VR 转换器 VR Converter效果能够在 2D、球面投影、立方图、球形图等格式之间转换&#xff0c;并支持调整摄像机视角&#xff0c;适用于 VR 视频格式适配、画面校正和动画视角调整等&#xff0c;确保…

无显示器安装访问树莓派3B+

一、硬件准备 树莓派3B&#xff0c;适配器&#xff08;供电&#xff09;&#xff0c;读卡器和SD卡 二、软件下载及安装 安装过程都是默认选项&#xff0c;一直点击下一步即可&#xff0c;在选择安装路径时可以改到你自己想装的盘里。 1.树莓派系统镜像 官网地址&#xff1…

Vue3路由组件和一般组件 切换路由时组件挂载和卸载 路由的工作模式

路由组件和一般组件 路由组件 一般放到pages或view目录 一般组件 一般放到component目录 切换路由 切换路由时&#xff0c;组件和执行挂载和卸载 路由的工作模式 Hash模式 缺点 1.不美观&#xff0c;路径带#号 优点 1.兼容性好 一般适用于管理系统 History模式 缺点…

多线程初阶(一)

文章目录 1.线程和进程的区别2.创建线程2.1Thread类2.2Runnable接口2.3匿名类创建Thread子类对象创建后台线程 3.Thread常⻅⽅法4.中断线程4.1中断标记&#xff08;Interrupt Flag&#xff09;4.2调⽤ interrupt() ⽅法 5.线程状态 1.线程和进程的区别 1.进程中包含线程&#…

1.3 Spring Boot原理解析

Spring Boot通过起步依赖&#xff08;如spring-boot-starter-parent和spring-boot-starter-web&#xff09;简化项目配置&#xff0c;减少版本冲突和依赖配置代码量。它采用“约定大于配置”的设计思想&#xff0c;通过SpringBootApplication注解&#xff08;包含SpringBootCon…

⭐算法OJ⭐N-皇后问题 II【回溯剪枝】(C++实现)N-Queens II

⭐算法OJ⭐N-皇后问题【回溯剪枝】&#xff08;C实现&#xff09;N-Queens 问题描述 The n-queens puzzle is the problem of placing n n n queens on an n n n \times n nn chessboard such that no two queens attack each other. Given an integer n, return the num…

第6章 定时器计数器

目录 6.1 定时计数器的结构框图 6.2 定时器的控制字 6.2.1 TMOD&#xff1a;工作方式控制寄存器 6.2.2 定时/计数器控制寄存器TCON 6.3 定时/计数器的4种工作方式 6.3.1 方式0、方式1&#xff08;13位、16位定时计数方式&#xff09; 6.3.2 方式2(常数自动重装入) 6.3.3 方…

JavaWeb基础一(Tomcat、Maven)

前言 web开发 web开发&#xff1a;Web开发是指在万维网或私有网络上创建和维护网站的工作。它包括网页设计、网页编程、数据库管理等多方面的技术。Web开发可以分为前端开发和后端开发&#xff0c;前端主要关注用户界面和用户体验&#xff0c;而后端则处理服务器、应用程序和…

写一写idea中使用tomcat启动activiti过程

一 环境 tomcat 9.0.62 activiti的war包版本 7.1.0.M6 二 操作 官网下载&#xff1a;https://www.activiti.org/get-started 2.1 先在idea中编辑配置 2.2 点击加号然后选择tomcat本地进行确认 2.3 点击部署之后下边小加号 选择第二个之后就是选择自己想要使用tomcat启动的…

基于开源库编写MQTT通讯

目录 1. MQTT是什么&#xff1f;2. 开发交互UI3. 服务器核心代码4. 客户端核心代码5. 消息订阅与发布6. 通讯测试7. MQTT与PLC通讯最后. 核心总结 1. MQTT是什么&#xff1f; MQTT&#xff08;Message Queuing Terlemetry Transport&#xff09;消息队列遥测协议&#xff1b;是…

MAVEN手动配置(阿里云)全教程

介于网上各种各样的MAVEN配置过程中方法大致相同却细节参差不齐&#xff0c;我总结了我遇见的一些问题&#xff0c;来完全的解决MAVEN手动配置的全过程&#xff0c;以及分享解决小毛病的经验。 所需材料&#xff1a; MAVEN3.9.9&#xff08;下载适合自己的版本即可&#xff09…

从0到1入门Linux

一、常用命令 ls 列出目录内容 cd切换目录mkdir创建新目录rm删除文件或目录cp复制文件或目录mv移动或重命名文件和目录cat查看文件内容grep在文件中查找指定字符串ps查看当前进程状态top查看内存kill终止进程df -h查看磁盘空间存储情况iotop -o直接查看比较高的磁盘读写程序up…

pytest结合allure

Allure 一、文档二、指令三、装饰器3.1 allure.step装饰器3.2 allure.description装饰器3.3 allure.title装饰器3.4 allure.link、allure.issue 和 allure.testcase装饰器3.5 allure.epic、allure.feature 和 allure.story装饰器3.6 allure.severity装饰器 一、文档 allure文档…

Dockerfile 深入浅出:从基础到进阶全解析

Dockerfile 深入浅出&#xff1a;从基础到进阶全解析 各位同学&#xff0c;大家好&#xff01;欢迎来到今天的 Dockerfile 课程。Docker 技术在当今的软件开发和部署领域可以说是非常热门&#xff0c;而 Dockerfile 作为构建 Docker 镜像的关键文件&#xff0c;掌握它对于我们…

大模型巅峰对决:DeepSeek vs GPT-4/Claude/PaLM-2 全面对比与核心差异揭秘

文章目录 一、架构设计深度解剖1.1 核心架构对比图谱1.2 动态MoE架构实现架构差异分析表 二、训练策略全面对比2.1 训练数据工程对比2.2 分布式训练代码对比DeepSeek混合并行实现GPT-4 Megatron实现对比 2.3 关键训练参数对比 三、性能表现多维评测3.1 基准测试全景对比3.2 推理…

贪心算法二

> 作者&#xff1a;დ旧言~ > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;了解什么是贪心算法&#xff0c;并且掌握贪心算法。 > 毒鸡汤&#xff1a;有些事情&#xff0c;总是不明白&#xff0c;所以我不会坚持。早安! >…

【Mac】MacOS系统下常用的开发环境配置2025版

早期版本的一个环境搭建参考 1、brew Mac自带终端运行&#xff1a; /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" Installation successful!成功后运行三行命令后更新环境&#xff08;xxx是mac的username&a…

【JavaEE】SpringMVC简单练习

目录 一、计算器1.1 接口定义1.2 前端代码1.3 后端代码1.4 运行结果 二、⽤⼾登录2.1 需求2.2 接口定义2.3 前端页面2.4 后端代码2.5 结果 三、留⾔板3.1 需求:3.2 接口3.3 前端代码3.4 后端代码3.5 运行结果 四、图书管理系统4.1 需求4.2 接口定义4.3 后端代码 一、计算器 1.…

go 分布式redis锁的实现方式

go 语言以高并发著称。那么在实际的项目中 经常会用到锁的情况。比如说秒杀抢购等等场景。下面主要介绍 redis 布式锁实现的两种高并发抢购场景。其实 高并发 和 分布式锁 是一个互斥的两个状态&#xff1a; 方式一 setNX&#xff1a; 使用 redis自带的API setNX 来实现。能解决…

网络安全等级保护2.0 vs GDPR vs NIST 2.0:全方位对比解析

在网络安全日益重要的今天&#xff0c;各国纷纷出台相关政策法规&#xff0c;以加强信息安全保护。本文将对比我国网络安全等级保护2.0、欧盟的GDPR以及美国的NIST 2.0&#xff0c;分析它们各自的特点及差异。 网络安全等级保护2.0 网络安全等级保护2.0是我国信息安全领域的一…