当前位置: 首页 > news >正文

【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
!逻辑非取反

短路与(&&)和短路或(||)

  1. 对于 && , 如果左侧表达式值为 false, 则表达式结果一定是 false, 无需计算右侧表达式.
  2. 对于 ||, 如果左侧表达式值为 true, 则表达式结果一定是 true, 无需计算右侧表达式.
  3. & 和 | 两边的表达式都要计算,使用短路与和短路或可以提高效率

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

这是使用三目运算符求两个值中的最大值
这里的计算分为三步:

  1. 先计算表达的值
  2. 如果表达式为true,则取表达式1的值,如果为false,则为表达式2的值
  3. 然后进行赋值

7. 位运算符

位运算符主要有四个: & | ~ ^ ,除 ~ 是一元运算符外,其余都是二元运算符

位运算符都是在二进制的基础上进行运算

  1. 按位与 &: 如果两个二进制位都是 1, 则结果为 1, 否则结果为 0.
  2. 按位或 |: 如果两个二进制位都是 0, 则结果为 0, 否则结果为 1.
  3. 按位取反 ~: 如果该位为 0 则转为 1, 如果该位为 1 则转为 0
  4. 按位异或 ^: 如果两个数字的二进制位相同, 则结果为 0, 相异则结果为 1.

8. 移位运算

移位运算也是在二进制的基础上进行运算

  1. 左移 <<: 最左侧位不要了, 最右侧补 0.
  2. 右移 >>: 最右侧位不要了, 最左侧补符号位(正数补0, 负数补1)
  3. 无符号右移 >>>: 最右侧位不要了, 最左侧补 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. 什么是运算符 运算符用于执行程序代码运算&#xff0c;会针…...

Promise-异步回调

1.理解Promise promise是ES6提出的异步编程的新的解决方案&#xff0c;通过链式调用解决ajax回调地狱 从语法上看&#xff0c;promise是一个构造函数&#xff0c;自己身上有all、reject、resolve方法&#xff0c;原型上有then、catch方法 从功能上看&#xff0c;Promise对象用…...

【设计模式之美 设计原则与思想:设计原则】21 | 理论七:重复的代码就一定违背DRY吗?如何提高代码的复用性?

在上一节课中&#xff0c;我们讲了 KISS 原则和 YAGNI 原则&#xff0c;KISS 原则可以说是人尽皆知。今天&#xff0c;我们再学习一个你肯定听过的原则&#xff0c;那就是 DRY 原则。它的英文描述为&#xff1a;Don’t Repeat Yourself。中文直译为&#xff1a;不要重复自己。将…...

深度学习 | 入个Pytorch的小门

本文主要参考 1’ 2’ 3 更新&#xff1a;2023 / 3 / 1 深度学习 | 入个Pytorch的小门 - 1. 常见数据操作创建操作算术操作加法索引形状查询形状改变形状广播机制广播条件运算数据类型转换Tensor转NumPyNumPy转Tensor线性回归线性回归的基本要素1. 模型2. 数据集3. 损失函数4.…...

应用上云指导

应用上云指导方法论。应用上云指传统应用迁移到云上&#xff0c;云上应用采用K8S部署。本文旨在提供一种方法、流程&#xff0c;指导应用上云&#xff0c;以求优化上云工作&#xff0c;提供应用上云效率。主要包含以下内容&#xff1a;应用上云工作角色、分工应用上云标准流程及…...

进程概念~

进程概念 &#xff08;冯诺依曼体系结构&#xff0c;操作系统&#xff0c;进程概念&#xff0c;进程状态&#xff0c;环境变量&#xff0c;程序地址空间&#xff09; 冯诺依曼体系结构&#xff1a;&#xff08;计算机硬件体系结构&#xff09; 输入设备&#xff0c;输出设备&a…...

三天吃透Java基础八股文

本文已经收录到Github仓库&#xff0c;该仓库包含计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构、校招社招分享等核心知识点&#xff0c;欢迎star~ Github地址&#xff1a;https://github.com/…...

YOLOv8训练自己的数据集(超详细)

一、准备深度学习环境本人的笔记本电脑系统是&#xff1a;Windows10YOLO系列最新版本的YOLOv8已经发布了&#xff0c;详细介绍可以参考我前面写的博客&#xff0c;目前ultralytics已经发布了部分代码以及说明&#xff0c;可以在github上下载YOLOv8代码&#xff0c;代码文件夹中…...

【洛谷 P1088】[NOIP2004 普及组] 火星人 题解(全排列+向量)

[NOIP2004 普及组] 火星人 题目描述 人类终于登上了火星的土地并且见到了神秘的火星人。人类和火星人都无法理解对方的语言&#xff0c;但是我们的科学家发明了一种用数字交流的方法。这种交流方法是这样的&#xff0c;首先&#xff0c;火星人把一个非常大的数字告诉人类科学…...

基于混合蛙跳算法优化SVM的滚动轴承故障诊断python实现

1.混合蛙跳算法(SFLA)原理 混合蛙跳算法(SFLA)是一种受自然生物模仿启示而产生的基于群体的协同搜索方法,由局部搜索和全局信息交换两部分组成。 混合蛙跳算法中,每个青蛙的位置代表了一个可行解。青蛙在沼泽中跳跃,沼泽在离散的地方有很多石头,青蛙可以跳过这些石头来找…...

如何让AI帮你干活-娱乐(2)

背景&#xff1a;好容易完成朋友的任务&#xff0c;帮忙给小朋友绘画比赛生成一些创意参考图片。他给我个挑战更高的问题&#xff0c;是否可以帮他用AI生成一些视频。这个乍一听以现在AI技术根本不太可能完成。奈何他各种坚持&#xff0c;无奈被迫营业。苦脸接受了这个不可能完…...

文件异步多备常用方案

业务需求上经常存在需要对同一个文件进行双上传&#xff0c;上传到不同云存储桶&#xff0c;以防出现某一个云厂商因各种意外导致自身服务出现不可用的情况&#xff0c;当然&#xff0c;还有其他措施可以避免&#xff0c;现在只针对通过程序业务代码而双写存储的这个场景。 业务…...

java面试八股文之------Redis夺命连环25问

java面试八股文之------Redis夺命连环25问&#x1f468;‍&#x1f393;1.为什么redis这么快&#x1f468;‍&#x1f393;2.redis的应用场景&#xff0c;为什么要用&#x1f468;‍&#x1f393;3.redis6.0之前为什么一直不使用多线程&#xff0c;6.0为甚么又使用多线程了&…...

【数据结构】AVL平衡二叉树底层原理以及二叉树的演进之多叉树

1.AVL平衡二叉树底层原理 背景 二叉查找树左右子树极度不平衡&#xff0c;退化成为链表时候&#xff0c;相当于全表扫描&#xff0c;时间复杂度就变为了O(n) 插入速度没影响&#xff0c;但是查询速度变慢&#xff0c;比单链表都慢&#xff0c;每次都要判断左右子树是否为空 需…...

K8S篇-安装nfs插件

前言 有关k8s的搭建可以参考&#xff1a;http://t.csdn.cn/H84Zu 有关过程中使用到的nfs相关的nas&#xff0c;可以参考&#xff1a; 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.多重背包标准写法:(平铺展开形式&#xff09; class Solution {public int maxValue(int N, int C, int[] s…...

汇编语言程序设计(四)之汇编指令

系列文章 汇编语言程序设计&#xff08;一&#xff09; 汇编语言程序设计&#xff08;二&#xff09;之寄存器 汇编语言程序设计&#xff08;三&#xff09;之汇编程序 汇编指令 1. 数据传输指令 指令包括&#xff1a;MOV、XCHG、XLAT、LEA、LDS、LES、PUSH、POP、PUSHF、LA…...

Vant2 源码分析之 vant-sticky

前言 原打算借鉴 vant-sticky 源码&#xff0c;实现业务需求的某个功能&#xff0c;第一眼看以为看懂了&#xff0c;拿来用的时候&#xff0c;才发现一知半解。看第二遍时&#xff0c;对不起&#xff0c;是我肤浅了。这里侧重分析实现原理&#xff0c;其他部分不拓展开来&…...

【自然语言处理】【大模型】大语言模型BLOOM推理工具测试

相关博客 【自然语言处理】【大模型】大语言模型BLOOM推理工具测试 【自然语言处理】【大模型】GLM-130B&#xff1a;一个开源双语预训练语言模型 【自然语言处理】【大模型】用于大型Transformer的8-bit矩阵乘法介绍 【自然语言处理】【大模型】BLOOM&#xff1a;一个176B参数…...

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK&#xff0c;开始写第二篇的内容了。这篇博客主要能写一下&#xff1a; 如何给一些三方库按照xmake方式进行封装&#xff0c;供调用如何按…...

多场景 OkHttpClient 管理器 - Android 网络通信解决方案

下面是一个完整的 Android 实现&#xff0c;展示如何创建和管理多个 OkHttpClient 实例&#xff0c;分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

在四层代理中还原真实客户端ngx_stream_realip_module

一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡&#xff08;如 HAProxy、AWS NLB、阿里 SLB&#xff09;发起上游连接时&#xff0c;将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后&#xff0c;ngx_stream_realip_module 从中提取原始信息…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序

一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...

音视频——I2S 协议详解

I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议&#xff0c;专门用于在数字音频设备之间传输数字音频数据。它由飞利浦&#xff08;Philips&#xff09;公司开发&#xff0c;以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲

文章目录 前言第一部分&#xff1a;体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分&#xff1a;体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...

JS手写代码篇----使用Promise封装AJAX请求

15、使用Promise封装AJAX请求 promise就有reject和resolve了&#xff0c;就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...

快刀集(1): 一刀斩断视频片头广告

一刀流&#xff1a;用一个简单脚本&#xff0c;秒杀视频片头广告&#xff0c;还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农&#xff0c;平时写代码之余看看电影、补补片&#xff0c;是再正常不过的事。 电影嘛&#xff0c;要沉浸&#xff0c;…...

Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换

目录 关键点 技术实现1 技术实现2 摘要&#xff1a; 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式&#xff08;自动驾驶、人工驾驶、远程驾驶、主动安全&#xff09;&#xff0c;并通过实时消息推送更新车…...

适应性Java用于现代 API:REST、GraphQL 和事件驱动

在快速发展的软件开发领域&#xff0c;REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名&#xff0c;不断适应这些现代范式的需求。随着不断发展的生态系统&#xff0c;Java 在现代 API 方…...