【Java|基础篇】超详细讲解运算符
文章目录
- 1. 什么是运算符
- 2. 算术运算符
- 隐式类型转换
- 强制类型转换
- 字符串的拼接
- 字符相加
- 自增和自减运算符
- 3.赋值运算符
- 4. 关系运算符
- 5. 逻辑运算符
- 短路与(&&)和短路或(||)
- 6.三目运算符
- 7. 位运算符
- 8. 移位运算
1. 什么是运算符
运算符用于执行程序代码运算,会针对一个以上操作数项目来进行运算。
作用: 对字面量和变量进行操作的符号
2. 算术运算符
算术运算符就是数学中的 加减乘除取余
| 运算符 | 描述 |
|---|---|
| + | 加 |
| - | 减 |
| * | 乘 |
| / | 除(取整) |
| % | 取余 |
示例:
public class Demo3 {public static void main(String[] args) {int a = 5;int b = 2;System.out.println("a+b="+(a+b));System.out.println("a-b="+(a-b));System.out.println("a*b="+(a*b));System.out.println("a/b="+(a/b));System.out.println("a%b="+(a%b));}
}
/*
输出结果:
a+b=7
a-b=3
a*b=10
a/b=2
a%b=1
*/
注意:
- 在代码中,如果有小数进行操作,可能会有精度不准确的问题(简单说一下原因是因为计算机是采用二进制的方式存储数据,小数不好表示.如有需要可以观看这篇文章➡计算机中数据的存储规则
- 做除法和取模时,右操作数不能为0
隐式类型转换
Java中有两个数据类型的转换模式:一种是隐形类型转换,另外一种是强制类型转换
先介绍隐式类型转换
先看以下代码:
public static void main(String[] args) {int a = 1;double b = 2.1;System.out.println(a + b);}
上面代码的结果是3.1 这就是隐式类型转换
数字在进行运算时,数据类型不一样是不能进行运算的,需要转成相同的数据类型才能够进行运算
隐形类型转换是 将取值范围小(精度小)的数据类型转成取值范围大(精度大)的数据类型
在进行运算时,取值范围小的数据类型自动变成取值范围大的数据,然后再进行运算
byte char short 类型的数据在进行运算时,都会类型提升为int类型的数值 再进行运算
强制类型转换
强制类型转换是 将取值范围大(精度大)的数据类型转成取值范围小(精度小)的数据类型
语法格式: 目标数据类型 变量名 = (目标数据类型) 被强转的数据
示例:
public static void main(String[] args) {double a = 12.3;// 目标数据类型 变量名 = (目标数据类型) 被强转的数据int b = (int) a;}
这就是强制类型转换
需要注意的是:在强制类型转换时,数据不能超过目标数据类型的取值范围
字符串的拼接
在讲算术运算符时,我是使用了字符串的拼接的
例如:
public static void main(String[] args) {int a = 5;int b = 2;System.out.println("a+b="+(a+b));}// 输出结果// a+b=7
当"+"操作中出现字符串时,那么此时这个"+"就不是算术运算符了,而是字符串的拼接,它会将字符串和数据拼接起来,变成一个新的字符串
字符相加
看以下代码:
public static void main(String[] args) {char a = 'a';char b = 'b';int ret = a + b;System.out.println(ret);}// 输出结果: 195
之前说过byte char short 类型的数据在进行运算时,都会类型提升为int类型的数值 再进行运算
那么字符和字符相加都是变为int类型的数据再相加,那么字符对应的数字就需要用到ASCII码表了
如果想字符对应的ASCII值,可以看看➡ASCII码一览表,ASCII码对照表
在 字符与字符 或 字符与数字 进行相加时,字符会变为ASCII码表对应的数字在进行相加
自增和自减运算符
| 符号 | 作用 |
|---|---|
| ++ | 将变量的值自增1 |
| – | 将变量的值自减1 |
这里的自增自减分的符号 可以放在变量名的前面也可以放在后面
示例:
public static void main(String[] args) {int a = 10;a++;System.out.println("a = "+ a);++a;System.out.println("a = "+ a);}//输出结果//a = 11//a = 12
从这里我们可以看到不管++在变量前面还是后面 就是将变量的值+1
当然++在变量前面还是后面还是有区别的
先看代码:
public static void main(String[] args) {int a = 10;int ret1 = ++a;System.out.println("ret1 = "+ ret1);int b = 10;int ret2 = b++;System.out.println("ret2 = "+ ret2);}// 输出结果://ret1 = 11//ret2 = 10
这就是++在变量前面还是后面的区别
在使用这种方式进行赋值时,++在前面时会变量的值会先自增1然后再进行赋值,如果++在后面则会先赋值然后再自增1
3.赋值运算符
赋值运算符就是 “=” 就是将一个数据赋值给另一个变量
其中,还有一些复合赋值运算符
| 运算符 | 实例 |
|---|---|
| += | b+=a 等价于 b=b+a |
| -= | b-=a 等价于 b=b-a |
| *= | b*=a 等价于 b=b*a |
| /= | b/=a 等价于 b=b/a |
| %= | b%=a 等价于 b=b%a |
4. 关系运算符
关系运算符就比较两边数据的大小
| 运算符 | 描述 |
|---|---|
| == | 判断内容是否相等 |
| != | 判断内容是否不相等 |
| > | 判断大于号左边的值是否大于右边 |
| < | 判断小于号左边的值是否小于右边 |
| >= | 判断大于号左边的值是否大于等于右边 |
| <= | 判断小于号左边的值是否小于等于右边 |
关系运算符的结果都是boolean类型的 结果要么为true 要么为false
注意: 不要将 "==" 写成 "="了
5. 逻辑运算符
| 符号 | 意义 | 作用 |
|---|---|---|
| & | 逻辑与(且) | 并且 两边都为真,才是真 |
| I | 逻辑或 | 或 两边都是假,才是假 |
| ^ | 逻辑异或 | 相同为false,不同为true |
| ! | 逻辑非 | 取反 |
短路与(&&)和短路或(||)
对于 && , 如果左侧表达式值为 false, 则表达式结果一定是 false, 无需计算右侧表达式.对于 ||, 如果左侧表达式值为 true, 则表达式结果一定是 true, 无需计算右侧表达式.- & 和 | 两边的表达式都要计算,使用短路与和短路或可以提高效率
6.三目运算符
语法格式: 关系表达式? 表达式1:表达式2
示例:
public static void main(String[] args) {int a = 10;int b = 20;int c = a > b ? a : b;System.out.println(c);}// 输出结果:20
这是使用三目运算符求两个值中的最大值
这里的计算分为三步:
- 先计算表达的值
- 如果表达式为true,则取表达式1的值,如果为false,则为表达式2的值
- 然后进行赋值
7. 位运算符
位运算符主要有四个:
& | ~ ^ ,除 ~ 是一元运算符外,其余都是二元运算符
位运算符都是在二进制的基础上进行运算
按位与 &: 如果两个二进制位都是 1, 则结果为 1, 否则结果为 0.按位或 |: 如果两个二进制位都是 0, 则结果为 0, 否则结果为 1.按位取反 ~: 如果该位为 0 则转为 1, 如果该位为 1 则转为 0按位异或 ^: 如果两个数字的二进制位相同, 则结果为 0, 相异则结果为 1.
8. 移位运算
移位运算也是在二进制的基础上进行运算
- 左移 <<: 最左侧位不要了, 最右侧补 0.
- 右移 >>: 最右侧位不要了, 最左侧补符号位(正数补0, 负数补1)
- 无符号右移 >>>: 最右侧位不要了, 最左侧补 0.
二进制的第一位是符号位,0代表正数,1代表负数
详情可以看一下:➡全面解析数据在内存中的存储
public static void main(String[] args) {int a = 10;System.out.println("a << 1 = "+(a<<1));System.out.println("a >> 1 = "+(a>>1));System.out.println("a >>> 1 = "+(a>>>1));}// 输出结果://a << 1 = 20//a >> 1 = 5//a >>> 1 = 5
左移 1 位, 相当于原数字 * 2. 左移 N 位, 相当于原数字 * 2 的N次方.右移 1 位, 相当于原数字 / 2. 右移 N 位, 相当于原数字 / 2 的N次方.
感谢你的观看!希望这篇文章能帮到你!
Java专栏在不断更新中,欢迎订阅!
“愿与君共勉,携手共进!”
相关文章:
【Java|基础篇】超详细讲解运算符
文章目录1. 什么是运算符2. 算术运算符隐式类型转换强制类型转换字符串的拼接字符相加自增和自减运算符3.赋值运算符4. 关系运算符5. 逻辑运算符短路与(&&)和短路或(||)6.三目运算符7. 位运算符8. 移位运算1. 什么是运算符 运算符用于执行程序代码运算,会针…...
Promise-异步回调
1.理解Promise promise是ES6提出的异步编程的新的解决方案,通过链式调用解决ajax回调地狱 从语法上看,promise是一个构造函数,自己身上有all、reject、resolve方法,原型上有then、catch方法 从功能上看,Promise对象用…...
【设计模式之美 设计原则与思想:设计原则】21 | 理论七:重复的代码就一定违背DRY吗?如何提高代码的复用性?
在上一节课中,我们讲了 KISS 原则和 YAGNI 原则,KISS 原则可以说是人尽皆知。今天,我们再学习一个你肯定听过的原则,那就是 DRY 原则。它的英文描述为:Don’t Repeat Yourself。中文直译为:不要重复自己。将…...
深度学习 | 入个Pytorch的小门
本文主要参考 1’ 2’ 3 更新:2023 / 3 / 1 深度学习 | 入个Pytorch的小门 - 1. 常见数据操作创建操作算术操作加法索引形状查询形状改变形状广播机制广播条件运算数据类型转换Tensor转NumPyNumPy转Tensor线性回归线性回归的基本要素1. 模型2. 数据集3. 损失函数4.…...
应用上云指导
应用上云指导方法论。应用上云指传统应用迁移到云上,云上应用采用K8S部署。本文旨在提供一种方法、流程,指导应用上云,以求优化上云工作,提供应用上云效率。主要包含以下内容:应用上云工作角色、分工应用上云标准流程及…...
进程概念~
进程概念 (冯诺依曼体系结构,操作系统,进程概念,进程状态,环境变量,程序地址空间) 冯诺依曼体系结构:(计算机硬件体系结构) 输入设备,输出设备&a…...
三天吃透Java基础八股文
本文已经收录到Github仓库,该仓库包含计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构、校招社招分享等核心知识点,欢迎star~ Github地址:https://github.com/…...
YOLOv8训练自己的数据集(超详细)
一、准备深度学习环境本人的笔记本电脑系统是:Windows10YOLO系列最新版本的YOLOv8已经发布了,详细介绍可以参考我前面写的博客,目前ultralytics已经发布了部分代码以及说明,可以在github上下载YOLOv8代码,代码文件夹中…...
【洛谷 P1088】[NOIP2004 普及组] 火星人 题解(全排列+向量)
[NOIP2004 普及组] 火星人 题目描述 人类终于登上了火星的土地并且见到了神秘的火星人。人类和火星人都无法理解对方的语言,但是我们的科学家发明了一种用数字交流的方法。这种交流方法是这样的,首先,火星人把一个非常大的数字告诉人类科学…...
基于混合蛙跳算法优化SVM的滚动轴承故障诊断python实现
1.混合蛙跳算法(SFLA)原理 混合蛙跳算法(SFLA)是一种受自然生物模仿启示而产生的基于群体的协同搜索方法,由局部搜索和全局信息交换两部分组成。 混合蛙跳算法中,每个青蛙的位置代表了一个可行解。青蛙在沼泽中跳跃,沼泽在离散的地方有很多石头,青蛙可以跳过这些石头来找…...
如何让AI帮你干活-娱乐(2)
背景:好容易完成朋友的任务,帮忙给小朋友绘画比赛生成一些创意参考图片。他给我个挑战更高的问题,是否可以帮他用AI生成一些视频。这个乍一听以现在AI技术根本不太可能完成。奈何他各种坚持,无奈被迫营业。苦脸接受了这个不可能完…...
文件异步多备常用方案
业务需求上经常存在需要对同一个文件进行双上传,上传到不同云存储桶,以防出现某一个云厂商因各种意外导致自身服务出现不可用的情况,当然,还有其他措施可以避免,现在只针对通过程序业务代码而双写存储的这个场景。 业务…...
java面试八股文之------Redis夺命连环25问
java面试八股文之------Redis夺命连环25问👨🎓1.为什么redis这么快👨🎓2.redis的应用场景,为什么要用👨🎓3.redis6.0之前为什么一直不使用多线程,6.0为甚么又使用多线程了&…...
【数据结构】AVL平衡二叉树底层原理以及二叉树的演进之多叉树
1.AVL平衡二叉树底层原理 背景 二叉查找树左右子树极度不平衡,退化成为链表时候,相当于全表扫描,时间复杂度就变为了O(n) 插入速度没影响,但是查询速度变慢,比单链表都慢,每次都要判断左右子树是否为空 需…...
K8S篇-安装nfs插件
前言 有关k8s的搭建可以参考:http://t.csdn.cn/H84Zu 有关过程中使用到的nfs相关的nas,可以参考: http://t.csdn.cn/ACfoT http://t.csdn.cn/tPotK http://t.csdn.cn/JIn27 安装nfs存储插件 NFS-Subdir-External-Provisioner是一个自动配置…...
xmu 离散数学 卢杨班作业详解【4-7章】
文章目录第四章 二元关系和函数4.6.2911121618.120.222.1232834第五章 代数系统的一般概念2判断二元运算是否封闭348111214第六章 几个典型的代数系统1.5.6.7.11.12151618第七章 图的基本概念12479111215第四章 二元关系和函数 4. A{1,2,3} 恒等关系 IA{<1,1>,<2,2…...
多重背包问题中的二进制状态压缩
1.多重背包问题 经典的多重背包问题和01背包问题的相似之处在于二者的一维遍历顺序都是从右侧往左侧遍历。 同时多重背包的一维写法不比二维写法降低时间复杂度。 2.多重背包标准写法:(平铺展开形式) class Solution {public int maxValue(int N, int C, int[] s…...
汇编语言程序设计(四)之汇编指令
系列文章 汇编语言程序设计(一) 汇编语言程序设计(二)之寄存器 汇编语言程序设计(三)之汇编程序 汇编指令 1. 数据传输指令 指令包括:MOV、XCHG、XLAT、LEA、LDS、LES、PUSH、POP、PUSHF、LA…...
Vant2 源码分析之 vant-sticky
前言 原打算借鉴 vant-sticky 源码,实现业务需求的某个功能,第一眼看以为看懂了,拿来用的时候,才发现一知半解。看第二遍时,对不起,是我肤浅了。这里侧重分析实现原理,其他部分不拓展开来&…...
【自然语言处理】【大模型】大语言模型BLOOM推理工具测试
相关博客 【自然语言处理】【大模型】大语言模型BLOOM推理工具测试 【自然语言处理】【大模型】GLM-130B:一个开源双语预训练语言模型 【自然语言处理】【大模型】用于大型Transformer的8-bit矩阵乘法介绍 【自然语言处理】【大模型】BLOOM:一个176B参数…...
2024年赣州旅游投资集团社会招聘笔试真
2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...
ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放
简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...
MODBUS TCP转CANopen 技术赋能高效协同作业
在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...
QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...
高防服务器能够抵御哪些网络攻击呢?
高防服务器作为一种有着高度防御能力的服务器,可以帮助网站应对分布式拒绝服务攻击,有效识别和清理一些恶意的网络流量,为用户提供安全且稳定的网络环境,那么,高防服务器一般都可以抵御哪些网络攻击呢?下面…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
三分算法与DeepSeek辅助证明是单峰函数
前置 单峰函数有唯一的最大值,最大值左侧的数值严格单调递增,最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值,最小值左侧的数值严格单调递减,最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...
【SpringBoot自动化部署】
SpringBoot自动化部署方法 使用Jenkins进行持续集成与部署 Jenkins是最常用的自动化部署工具之一,能够实现代码拉取、构建、测试和部署的全流程自动化。 配置Jenkins任务时,需要添加Git仓库地址和凭证,设置构建触发器(如GitHub…...
【深度学习新浪潮】什么是credit assignment problem?
Credit Assignment Problem(信用分配问题) 是机器学习,尤其是强化学习(RL)中的核心挑战之一,指的是如何将最终的奖励或惩罚准确地分配给导致该结果的各个中间动作或决策。在序列决策任务中,智能体执行一系列动作后获得一个最终奖励,但每个动作对最终结果的贡献程度往往…...
