初学Java:对于运算符的认识
文章目录运算符1. 什么是运算符2. 算数运算符2.1 基本四则运算符加减乘除模 - * / %2.2 增量运算符 . - . * . / . %2.3 自增/自减运算符 , --3. 关系运算符4. 逻辑运算符重点5. 位运算符6. 移位运算主要了解即可7. 条件运算符或称为三目运算符8. 运算符的优先级运算符这里我们学习运算符顺便跟上篇结合一下提出一个问题什么叫一个表达式表达式通俗来讲就是变量 运算符 表达式1. 什么是运算符计算机的最基本的用途之一就是执行数学运算比如int a10;int b20;ab;ab;上述 和 - 等就是运算符即对操作数进行操作时的符号不同运算符操作的含义不同。作为一门计算机语言Java也提供了一套丰富的运算符来操纵变量Java中的运算符可以主分为以下几个1. 算术运算符 - * / % 2. 关系运算符 3. 逻辑运算符 4. 位运算符 5. 移位运算符 6. 条件运算符2. 算数运算符2.1 基本四则运算符加减乘除模 - * / %int a20;int b10;System.out.println(ab);//30System.out.println(a-b);//10System.out.println(a*b);//200System.out.println(a/b);//2System.out.println(a%b);//0补充模运算相当于数学中除法的余数注意都是二元运算符使用时必须要有左右两个操作数int / int 结果还是 int类型 而且会向下取整int a3;int b2;//在数学中应该是1.5但是在Java中输出结果为一会向下取整即小数点之后全部舍弃掉了System.out.println(a/b);//如果要得到数学中的结果可以使用如下方式double da*1.0/b;System.out.println(d);做除法和取模时右操作数不能为0int a1;int b0;System.out.println(a/b);//运算结果/* Exception in thread main java.lang.ArithmeticException: / by zero at Test.main(Test.java:5) */注意为 0 会报错噢4. 在C语言中我们的 %操作符 只能操作整数但是在Java中 % 不仅可以对整数取模也可以对double类型的值进行取模但是没有意义所以我们一般情况下都是对整数取模的System.out.println(11.5%2.0);//运行结果//1.5采用 % 运算符的表达式其结果的正负性会受到第一个操作数的正负影响即System.out.println(-10%3);//结果是 -1在C语言中我们的 %操作符只能操作整数但是在Java中两侧的操作数类型不一致时向类型大的提升所以说我们的Java是自由哒咳咳继续看System.out.println(10.2);// 的左侧是int 右侧是 double 在加之前 int 会被提升为double//所以会输出 1.22.2 增量运算符 . - . * . / . %该种类型运算符操作完成后会将操纵的结果赋值给左操作数。int a1;a2;//相当于 a a 2;System.out.println(a);//输出3a-1;//相当于 a a - 1System.out,println(a);//输出2a*3;//相当于 a a * 3System.out.println(a);//输出6a/3;//相当于 a a / 3System.out.println(a);//输出2a%3;// 相当于 a a % 3System.out.println(a);//输出2注意只有变量才能使用该运算符常量不能使用。还有别写成这种情况32补充int c10;long d20;ccd;//会报错在运算时c会提升为long类型可是赋值给的c又是没有被类型提升的System.out.println(c);但是呢有一个小知识点写成这样就可以了int c10;long d20;cd;//这里会直接给你提升为long然后成功运算System.out.println(c);2.3 自增/自减运算符 , –是给变量的值 1–是给变量的值减一。int a1;a;//后置表示给a的值加1此时a的值为2System.out.println(a);//注意后置是先使用变量原来的值表达式结束后再给原来的值赋值1因此输出2System.out.println(a);//输出3a;// 前置 表示给a的值加1System.out.println(a);// 注意前置是先给变量1然后使用变量中的值因此输出5System.out,println(a);// 输出5// --操作符给操作-1与含义类似尤其是在进行混合使用的情况下一定要搞清楚前置 与 后置 的区别。注意如果单独使用【前置】和【后置】没有任何区别如果混合使用【前置】先1然后使用变量1后的值【后置】先使用变量原来的值表达式结束时才给变量1只有变量才能使用自增/自减运算符常量不能使用因为常量是不允许被修改的3. 关系运算符关系运算符主要有六个 ,其计算结果是 true 或者 falseint a10;int b20;//注意在Java中 表示赋值要与数学中的含义区分//在Java中 表示相等System.out.println(ab);//falseSystem.out.println(a!b);//trueSystem.out.println(ab);//trueSystem.out.println(ab);//falseSystem.out.println(ab);//trueSystem.out.println(ab);//false注意当需要多次判断时不能连着写否则都无法进行编译比如int a10;System.out.println(3a5);在这里说明一下缘由在介绍关系运算符的开头就说明了我们的关系运算符其计算结果是true或false所以说怎么可能拿一个表示真假的关键字来表示数字的大或小。4. 逻辑运算符重点逻辑运算符主要有三个 || !运算结果都是boolean类型。逻辑 与 语法规则表达式1 表达示2左右表达式必须是boolean类型的结果。相当于现实生活中的且比如如果是学生并且带有学生证才能享受半票。即两个表达式都为真结果才是真只要有一个是假结果就是假int a1;int b2;System.out.println(a1b2);//左为真且右为真则结果为真System.out.println(a1b100);//左为真但右为假则结果为假System.out.println(a100b100);//左为假且右为真则结果为假System.out.println(a100b100);//左为假且右为假则结果为假);逻辑 ||语法规则表达式1 || 表达式2左右表达式必须是 boolean类型的结果。相当于现实生活中的或比如买房子交钱时全款 或者 按揭都可以如果全款或者按揭房子都是你的否则站一边去。int a1;int b2;System.out.println(a1||b2);// 左为真 且 右为真 则结果为真System.out.println(a1||b100);// 左为真 但 右为假 则结果也为真System.out.println(a100||b2);// 左为假 但 右为真 则结果也为真System.out.println(a100||b100);// 左为假 且 右为假 则结果为假注意左右表达式至少有一个为真则结果为真逻辑非 语法规则 ! 表达式真变假假变真int a1;System.out.println(!(a1));// a 1 为true取个非就是falseSystem.out.println(!(a!1));// a ! 1 为false取个非就是true补充短路求值讲一下短路与和短路或 和 || 遵守短路求值的规则System.out.println(102010/00);//为trueSystem.out.println(1020||10/00);//为true我们都知道计算10 / 0会导致程序抛出异常但是上面的代码却能正常运行说明10 / 0并没有被真正的求值。注意对于 如果左侧表达式返回的值为false则表达式的结果一定是false无需计算右侧表达式即当两个表达式同时为真结果就是真但是只要第一个表达式为假那么其结果就为假此时并不会执行第2个表达式。验证publicclassTest{publicstaticvoidmain(String[]args){int a1;int b2;System.out.println(ab10/00);}}上述代码执行的结果是false并没有报错所以说明了后面的代码确实没有被执行。2. 对于 || 如果左侧表达式返回的值为true则表达式结果一定是true无需计算右侧表达式其他的小点跟****很像在这里就不过多阐述了。3. 和 | 如果表达式结果为 boolean 时也表示逻辑运算但与 || 相比它们不支持短路求值System.out.println(102010/0);//程序抛出异常System.out.println(1020|10/0);//程序抛出异常我们后面要讲到的 按位与和 按位或| 没有所谓的 短路现象。5. 位运算符Java中数据存储的最小单位是字节而数据操作的最小单位是比特位字节是最小的存储单位每个字节是由8个二进制的比特位组成的多个字节组合在一起可以表示各种不同的数据。位运算符主要有四个 | ~ ^除了 ~ 是一元运算符外其余都是二元运算符。位操作符表示按二级制位运算计算机中都是使用二级制来表示苏数据的01构成的序列按位计算就是在按照二进制位的每一位依次进行计算。按位与 :有0则0全1为1int a10;int b20;System.out.println(ab);进行按位计算需要把 10 和 20 转成二进制分别为 1010 和 10100即0000101000010100————————00000000按位或 |有1为1全0为0int a10;int b20;System.out.println(a|b);运算方式和按位与类似即0000101000010100————————000111110注意当 和 | 的操作数为整数(int , short , long , byte)的时候表示按位运算当 boolean 的时候表示逻辑运算。按位异或 ^如果两个数字的二进制相同则结果为 0 相异则结果为 1.即相同为1相异为0int a0x1;int b0x2;System.out.printf(%x\n,a^b);注意如果两个数相同则异或的结果为0.按位取反 ~如果该位为 0 则转为 1 如果该位为 1 则 0int a0xf;System.out.print(%x\n,~a);注意1.0x 前缀的数字为十六进制数字(十六进制可以看成是二进制的简化表示方式一个十六进制数字对应4个二进制位.)2.0xf表示10进制的15也就是二进制的 1111.3.printf能够格式化输出内容%x表示按照十六进制输出4.\n表示换行符这里补充一下我们的 和 | 事实上是可以代替 以及 ||其使用的只不过不存在短路的问题publicclassTest{publicstaticvoidmain(String[]arge){int a1;int b2;System.out.println(1020100);//真System.out.println(1020100);//第一个为假System.out.println(1020100);//第二个为假System.out.printtn(1020100);//都为假System.out.println(102010/00);报错因为不存在短路问题后续代码会被执行导致/0报错}}6. 移位运算主要了解即可移位运算符有三个** , , **都是二元运算符且按照二进制比特位来运算。左移 最左侧不要了最右侧补0.int a0x10;System.out.println(a1);//运行结果注意是按照十六进制来进行打印的//20通俗来讲就是可以这样0000 1011 ——移一位—— 11进行操作后0001 0110 ———— 22注意向左移位时丢弃的是符号位因此正数左移可能会编程负数。2.右移 最右侧位不要了最左侧符号位正数补0负数补1简单来说就是符号位什么是就补什么int a0x10System.out.println(a1);//运行结果注意是按照十六进制打印//8int b0xffff0000;System.out.prinyln(b1);//运行结果注意是按照十六进制打印的//ffff8000可以这样0000 1011 ——移一位—— 0000 0101 ———— 50000 1011 ——移两位——0000 0010 ———— 23.无符号右移 最右侧不要了最左侧补0int a0xffffffff;System.out.println(a1);//运行结果是按照十六进制来进行打印//7fffffff注意1. 左移一位相当于原数字 * 2左移 N 位相当于原数字 * 2的N次方。2.右移一位相当于原数字 / 2 右移N位相当于原数字 / 2 的N次方。3. 由于计算机计算移位的效率要远高于计算乘除当某个代码正好乘除 2 的N次方的时候就可以用移位运算代替。4. 移动负数位或者移位数过大时没有意义。7. 条件运算符或称为三目运算符条件运算符只有一个表达式1 表达式 2 表达式3当表达式1的值为true时整个表达式的值为表达式2的值.当表达式1的值为false时整个表达式的值为表达式3的值。也是Java中唯一的一个三目运算符是条件判断语句的简化写法。补充有一个好的记忆方法即表达式1是正确的吗如果表达式是正确的那么就返回表达式2的值如果表达式1是错误的那么就返回表达式3的值//求两个整数的最大值int a10;int b20;int maxab?a:b;这里再来一道小题大家感兴趣可以看看boolean flgtruetrue?truefalse?false:true:false;System.out.println(flg);给上 () 就好了解了这里给图解释一下即boolean flg(truetrue)?(truefalse?false:true):false;System.out.println(flg);所以我们其实没有必要去强行记忆 (就是死记硬背) 每一个运算符的优先级要常用 ** () **注意表达式2和表达式3的结果要是同类型的除非能发生类型隐式转换int a10;int b20;int cab?1:2.0;表达式不能单独存在其产生的结果是必定会被使用的。int a10;int b20;ab?a:b;//会报错因为其产生的结果是没有被使用的。8. 运算符的优先级在一条表达式中各个运算符可以混合起来运算但是运算符的优先级不同比如 * 和 / 的优先级要高于 和 - 有些情况下稍不注意可能就会造成很大的麻烦。//求 a 和 b 的平均值int a10;int b20;int ca(b-a)1;System.out.println(c);上述表达式中由于 的优先级要高于 因此 a 先和 b - a 的结果做加法整体为20最后在进行右移因此结果为10.注意:运算符之间是有优先级的具体的规则我们不必记忆在可能存在歧义的代码中加上括号即可。//求a和b的平均值int a10;int b20;int ca((b-a)1);System.out.println(c);欧克了.要知道这个优先级不要去死记硬背要习惯化用().

相关新闻

【信息科学与工程学】【通信工程】第八十六篇 通信网络设备及通信网络组网的所有学科知识01

【信息科学与工程学】【通信工程】第八十六篇 通信网络设备及通信网络组网的所有学科知识01

"数学基础 → 物理与器件 → 材料与力学 → 计算与软件系统 → 通信与网络技术 → 产品与解决方案"六大层次组织,覆盖 OTN/路由交换/无线/核心网等网络硬件设备及端到端网络解决方案中涉及的学科知识。 一、数学基础学科 # 学科 核心知识点 在网络产品中的作用 …

2026/10/23 15:22:08 阅读更多 →
实时语音转写系统实战:VAD切分、Whisper引擎与模型替换指南

实时语音转写系统实战:VAD切分、Whisper引擎与模型替换指南

最近看到 Meta 的 Muse Voice Transcribe 实时语音转写模型时,最让我在意的并不是“又多了一个语音识别模型”这个新闻点,而是整个讨论里反复出现的两个关键词:实时与多语言。做过会议纪要、直播字幕、语音笔记、客服质检这类功能的开发者&am…

2026/10/24 23:06:09 阅读更多 →
Meta Muse Voice Transcribe:实时语音转写技术解析与工程实践

Meta Muse Voice Transcribe:实时语音转写技术解析与工程实践

Meta 在实时语音转写方向又放了一颗新棋子:Muse Voice Transcribe。对很多做语音应用、会议助手、字幕工具的开发者来说,这件事值得好好拆一拆。本文会从技术定位、模型原理、场景落地、工程排查四个维度整理一篇完整实测思考,既有概念科普&a…

2026/10/23 11:32:44 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/10/26 12:00:21 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/10/27 4:06:49 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/10/27 7:21:53 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/10/26 12:00:21 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/10/27 6:20:47 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/10/27 4:06:50 阅读更多 →

日新闻

周新闻

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/26 12:00:19 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/27 7:21:50 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/26 8:34:37 阅读更多 →