Java17运算符看这一篇就够了
ztj100 2024-12-06 20:54 11 浏览 0 评论
本文主要是讲解 Java 中的运算符。对于运算符而言是编程参与计算的基础核心内容。最基础的加减乘除取余。到后面的逻辑运算大于小于等于不等于。
本文内容思维导图
先从最简单的算术运算符说起。
算术运算符
算术运算符又分为: 一元运算符和二元运算符, 并且在 Java 中包含三元运算符, 就是条件运算符或者叫作三目运算符只是名字不同,含义相同。
一元运算符
一元运算符只有一个变量就可以进行操作。常用的一元运算符就是自加,自减。一共四个一元运算符。
示例代码, 这里使用 JShell 快速查看结果。
需要注意其中的自加和自减的规则。当运算符在前的时候 ++ a; 运算符的优先级比较高, 所以会先处理这个代码, 所以可以看到代码里面直接返回了结果 4。但是 a ++ 的时候却没有直接返回结果, 因为他的运算符比价低。 所以重新调用该变量就会打印出来当前的值。
代码定义如下:
运行查看结果:
二元运算符
二元运算符一共5个。分辨是加减乘除取余(+、-、*、/、%)。
其中,在进行除法运算的时候,遵守除数不能为 0;
如果除数为 0 就会报错, 错误如下:
代码示例如下:
运行查看结果,编译, 运行:
赋值运算符
对于赋值运算符基本上贯穿了整个类的周期。常用的 = 赋值。 和简写赋值和算术运算符的使用方式。赋值运算符有如下图所示的使用方式。
使用 JShell 进行测试代码如下:
代码示例如下:
int a = 0;
a = 3;
System.out.println(a);// 3
a += 3;
System.out.println(a);// 6
a -= 3;
System.out.println(a);// 3
a *= 3;
System.out.println(a);// 9
a /= 3;
System.out.println(a);// 3
a %= 2;
System.out.println(a);// 1
比较运算符
比较运算符, 也可以说是布尔运算符。 主要是比较两个表达式的结果。 (表达式) 操作符 (表达式)
根据上面的运算符进行案例演示, 一定要动手练习。 更能加深印象。
只要知道比较运算是最终得到一个布尔类型的值。并且在进行比较运算的时候, 一定要注意其优先级。代码这次自己动手做吧。 有上面的演示, 应该很容易就搞定。
逻辑运算符
对于逻辑运算符, 主要就是 3 个。 逻辑与、逻辑或、逻辑非。和数学中的与或非意思一致。
格式: 表达式1 逻辑运算符 表达式2
逻辑运算符大多数情况下会和其他的运算符一起使用, 主要做一些简单或复杂的逻辑运算。 并且通常都是和 if, for 等逻辑表达式一起使用。
简单的说一说, 对于逻辑与和逻辑或不同点。 逻辑与为第一个表达式和第二个表达式都等于真值的情况下才会表达式成立。 逻辑或是第一个表达式为真值的情况下, 就不会在执行第二个表达式。 因为不管第二个表达式是否成立, 该逻辑运算都是真值了。
位运算符
对于任何编程语言而言, 最终的操作都是二进制表示, 因为计算机只认识二进制, 而八进制,十进制或者十六进制都是为了让开发人员方便开发。对于 Java 来说, 也可以针对数的某个值进行运算。这就需要位运算符的参与了。也是为了方便对二进制进行操作。
位运算符主要有一下运算符:
位与 &
按位与和逻辑运算符的逻辑与很类似,一个比较的表达式, 一个是按照位来进行判断。在二进制中, 位与的判断为都为 1 的记做 1 否则记做 0。
按位与规则如下:
0 & 0 = 0;
0 & 1 = 0;
1 & 0 = 0;
1 & 1 = 1;
先看一个都是正整数的值 10 & 2。
最终得出结果 0000 1010 & 0000 0010 = 0000 0010 转换成十进制就是2。
对于负值的位与运算有点区别的地方就是参与运算的是补码。
举例说明: 10 & -2
具体如何得到补码, 可以参考我之前写的文章基础类型的相互转换。这里对于负值的情况需要了解什么是原码,反码和补码。参与运算的是补码。-2 的原码是 1000 0010 反码是 1111 1101 补码 在反码的基础最后一位加 1 得到1111 1110。
最终结果得到 0000 1010 & 1111 1110 = 0000 1010 十进制也就是 10。
这个时候怎么校验结果是否正确呢? 直接写 Java 代码就好了, 打开 jshell:
位或 |
按位或, 和逻辑或很类似, 只要二者有一位 1 结果就是 1。
按位或规则如下:
0 | 0 = 0;
0 | 1 = 1;
1 | 0 = 1;
1 | 1 = 1;
根据上面的运算得到了 10 | 2 = 10。
负值有略有不同。
还是要灵活运用原码反码和补码,特别是负数的情况下, 因为正数的原码和补码一致。
位反 ~
按位反, 和逻辑非类似。 是对位进行直接取反。
按位反规则如下:
~1 = 0;
~0 = 1;
先用 2 进行运算处理:
在进行 -2 的运算操作
-2 的原码 需要转换成补码, 用补码进行取反运算。 得到 1 的二进制。
代码演示如下:
位异或 ^
位异或是基于二进制的位运算。 采用符号 XOR 在 Java 中使用 ^ 进行表示。两个值相同取 0, 不同的取 1。
按位异或规则如下:
1 ^ 1 = 0;
0 ^ 0 = 0;
1 ^ 0 = 1;
0 ^ 1 = 1;
举例 10 ^ 2
举例 10 ^ -2
代码演示结果的准确性:
异或在代码优化和实际的工作中会经常用到。 后续实战中用到了在详细分析用法, 现在知道进行异或运算即可。
位左移 <<
将一个操作数进行二进制位往左移, 移动后空出来的低位用 0 进行填充。移除的高位舍去。高位丢弃,低位补零。
操作数 << 移动的位数
举例说明 10 << 2
位左移代码演示:
位右移 >>
将一个操作数进行二进制往右移, 移动后,有两种情况,一种有无符号一种是有符号。也就是最高位为 0 移动后高位补 0, 如果最高位(符号位)为 1, 移动后空缺位都为 1.
操作数 >> 移动的位数
举例说明 10 >> 2
对于负数举例 -2 >> 2 空缺位补 1:
位右移代码演示:
注意这两者的区别。
无符号位右移 >>>
这个是和右移操作上是一致的, 但是不管是否最高位(符号位)为 1, 空缺位都使用 0 进行补齐。
操作数 >>> 移动的位数
举例说明 10 >>> 2
对于负数来说。 这里有点区别, 因为对于负值来说, 上面其实都是 32 位, 为了让大家看起来舒服转换成了对应的 8 位的。 因为无符号位右移会改变正负值, 所以 32 位的负值和 8 位的负值是不一致的。
并且 Java 在处理 byte, short , char 等值进行移位操作前, 会先将类型转换成 int 因为 int 占用 32 位。
所以 -2 >>> 2 的时候,8 位运算应该是如下:
因为会先转换成 32 位。 所以 32 位的 -2 等于如下:
也就是结果: 1073741823
无符号位右移代码如下:
理解原理。 更能发现问题。
类型比较运算符
这里说的类型比较是对象的比较。 判断每个定义的变量是否是某个类。该类可以是(接口、抽象类)。
语法规则:
boolean = 变量 instanceof 类
举例说明:
运行查看结果:
这里需要注意:
- null 值是没有引用的, 所以和任何值都不相等。
- instanceof 比较的是引用类型, 不能用于基础类型的比较。
条件(三目)运算符
三目运算在 Java 中只有一个就是 ? :
三目运算的语法格式:
布尔表达式 ? 表达式1 : 表达式2
大部分情况下, 对于三目运算是 if 和 else 的简写。举例说明:
int a = 1; int b = 2;
String msg = a > b ? "a 比 b 大" : "a 比 b 小";
System.out.println(msg);
//上面的结果和下面一致
if(a > b){
msg = "a 比 b 大";
}else{
msg = "a 比 b 小";
}
//msg 是 "a 比 b 小"
运算符的优先级
所有的数学运算都是从左向右进行运算的, 对于 Java 来说大部分运算也是遵守从左向右的规则。 但是一元运算符,赋值运算符和三目运算符例外。他们是从右向左进行运算。
运算符的内容告一段落, 接下来就是开始逻辑表达式的学习。 教程编写不易。希望各位大看官点赞收藏加关注。更多内容大放送。
相关推荐
- 干货 | 各大船公司VGM提交流程(msc船运公司提单查询)
-
VGM(VerifiedGrossMass)要来了,大外总管一本正经来给大家分享下各大船公司提交VGM流程。1,赫伯罗特(简称HPL)首先要注册账户第一,登录进入—选择product------...
- 如何修改图片详细信息?分享三个简单方法
-
如何修改图片详细信息?分享三个简单方法我们知道图片的详细信息里面包含了很多属性,有图片的创建时间,修改时间,地理位置,拍摄时间,还有图片的描述等信息。有时候为了一些特殊场景的需要我们需要对这些信息进行...
- 实用方法分享:没有图像处理软件,怎么将一张照片做成九宫格?
-
在发朋友圈时,如果把自己的照片做成九宫格,是不是更显得高大上?可能你问,是不是要借助图片处理软件,在这里,我肯定告诉你,不需要!!!你可能要问,那怎么实现呢?下面你看我是怎么做的,一句代码都不写,只是...
- 扫描档PDF也能变身“最强大脑”?RAG技术解锁尘封的知识宝藏!
-
尊敬的诸位!我是一名物联网工程师。关注我,持续分享最新物联网与AI资讯和开发实战。期望与您携手探寻物联网与AI的无尽可能。今天有网友问我扫描档的PDF文件能否做知识库,其实和普通pdf处理起来差异...
- 这两个Python库,轻而易举就能实现MP4与GIF格式互转,太好用了
-
mp4转gif的原理其实很简单,就是将mp4文件的帧读出来,然后合并成一张gif图。用cv2和PIL这两个库就可以轻松搞定。importglobimportcv2fromPILimpo...
- python图片处理之图片切割(python把图片切割成固定大小的子图)
-
python图片切割在很多项目中都会用到,比如验证码的识别、目标检测、定点切割等,本文给大家带来python的两种切割方式:fromPILimportImage"""...
- python+selenium+pytesseract识别图片验证码
-
一、selenium截取验证码#私信小编01即可获取大量Python学习资源#私信小编01即可获取大量Python学习资源#私信小编01即可获取大量Python学习资源importjso...
- 如何使用python裁剪图片?(python图片截取)
-
如何使用python裁剪图片如上图所示,这是一张包含了各类象棋棋子的图片。我们需要将其中每一个棋子都裁剪出来,此时可以利用python的...
- Python rembg 库去除图片背景(python 删除图片)
-
rembg是一个强大的Python库,用于自动去除图片背景。它基于深度学习模型(如U^2-Net),能够高效地将前景物体从背景中分离,生成透明背景的PNG图像。本教程将带你从安装到实际应用...
- 「python脚本」批量修改图片尺寸&视频安帧提取
-
【python脚本】批量修改图片尺寸#-*-coding:utf-8-*-"""CreatedonThuAug2316:06:352018@autho...
- 有趣的EXCEL&vba作图(vba画图表)
-
还记不记得之前有个日本老爷爷用EXCEL绘图,美轮美奂,可谓是心思巧妙。我是没有那样的艺术细胞,不过咱有自己的方式,用代码作图通过vba代码将指定的图片写入excel工作表中,可不是插入图片哦解题思...
- 怎么做到的?用python制作九宫格图片,太棒了
-
1.应用场景当初的想法是:想把一张图切割成九等份,发布到微信朋友圈,切割出来的图片,上传到朋友圈,发现微信不按照我排列的序号来排版。这样的结果是很耗时间的。让我深思,能不能有一种,直接拼接成一张...
- Python-连续图片合成视频(python多张图叠加为一张)
-
前言很多时候,我们需要将图片直接转成视频。下面介绍用python中的OpenCV将进行多张图合成视频。cv2安装不要直接用pipinstallcv2,这会报错。有很多人建议用打开window自带的...
- 如何把多个文件夹里的图片提取出来?文件夹整理合并工具
-
在项目管理中,团队成员可能会将项目相关的图片资料分散存储在不同的文件夹中,以便于分类和阶段性管理。然而,当项目进入汇报或总结阶段时,需要将所有相关图片整合到一个位置,以便于制作演示文稿、报告或进行项目...
- 超简单!为图片和 PDF 上去掉水印(pdf图片和水印是一体,怎么去除)
-
作者:某某白米饭...
你 发表评论:
欢迎- 一周热门
- 最近发表
-
- 干货 | 各大船公司VGM提交流程(msc船运公司提单查询)
- 如何修改图片详细信息?分享三个简单方法
- 实用方法分享:没有图像处理软件,怎么将一张照片做成九宫格?
- 扫描档PDF也能变身“最强大脑”?RAG技术解锁尘封的知识宝藏!
- 这两个Python库,轻而易举就能实现MP4与GIF格式互转,太好用了
- python图片处理之图片切割(python把图片切割成固定大小的子图)
- python+selenium+pytesseract识别图片验证码
- 如何使用python裁剪图片?(python图片截取)
- Python rembg 库去除图片背景(python 删除图片)
- 「python脚本」批量修改图片尺寸&视频安帧提取
- 标签列表
-
- idea eval reset (50)
- vue dispatch (70)
- update canceled (42)
- order by asc (53)
- spring gateway (67)
- 简单代码编程 贪吃蛇 (40)
- transforms.resize (33)
- redisson trylock (35)
- 卸载node (35)
- np.reshape (33)
- torch.arange (34)
- node卸载 (33)
- npm 源 (35)
- vue3 deep (35)
- win10 ssh (35)
- exceptionininitializererror (33)
- vue foreach (34)
- idea设置编码为utf8 (35)
- vue 数组添加元素 (34)
- std find (34)
- tablefield注解用途 (35)
- python str转json (34)
- java websocket客户端 (34)
- tensor.view (34)
- java jackson (34)