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

从初学者到专家:Java运算符的完整指南

目录

1.算数运算符

2.增量运算符 

2.1自增/自减运算符

4. 逻辑运算符

5.位运算符

6.移位运算符  

 7. 条件运算符



导言:
Java作为一门广泛使用的编程语言,其运算符是编写代码时必不可少的一部分。本篇博客将为你详细介绍Java中的各种运算符,从基础的算术运算符到高级的位运算符和三元运算符,为你打开运算符的奥秘之门。我们将通过代码示例和简单例子来帮助你更好地理解和应用这些运算符。

1.算数运算符

基本四则运算符:算术运算符用于执行基本的数学运算,包括加法、减法、乘法、除法、取模等。下面是一些常见的算术运算符及其用法:
int a = 10;
int b = 5;int sum = a + b;        // 加法运算
int difference = a - b; // 减法运算
int product = a * b;    // 乘法运算
int quotient = a / b;   // 除法运算
int remainder = a % b;  // 取余运算

注意事项:

1.都是二元运算符,使用时必须要有左右两个操作数

int a = 10;
int b = 5;int sum = a + b;        // 加法运算
int difference = a - b; // 减法运算
int product = a * b;    // 乘法运算
int quotient = a / b;   // 除法运算
int remainder = a % b;  // 取余运算

2.int / int 结果还是int类型,而且会向下取整

inta=3;
intb=2;
//在数学中应该是1.5但是在Java中输出结果为1会向下取整,即小数点之后全部舍弃掉了System.out.println(a/b);//如果要得到数学中的结果,可以使用如下方式
doubled=a*1.0/b;   //只要相乘数有一位数字是小数,结果就为小数
System.out.println(d);

3.做除法和取模时,右操作数不能为0

int a = 1;
int b = 0;
System.out.println(a / b)
// 运行结果
Exception in thread "main" java.lang.ArithmeticException: / by zero
at Test.main(Test.java:5)

4.% 不仅可以对整型取模,也可以对double类型取模,但是没有意义,一般都是对整型取模的

System.out.println(11.5 % 2.0);
// 运行结果
1.5

5.两侧操作数类型不一致时,向类型大的提升

System.out.println(1+0.2);
//+的左侧是int,右侧是double,在加之前int被提升为double型
//故输出1.2

2.增量运算符 

该种类型运算符操作完成后,会将 操纵的结果赋值给左操作数。
具体示例如下:
int a = 1;
a += 2; // 相当于 a = a + 2
System.out.println(a); // 输出3a -= 1; // 相当于 a = a - 1
System.out.println(a); // 输出2a *= 3; // 相当于 a = a * 3
System.out.println(a); // 输出6a /= 3; // 相当于 a = a / 3System.out.println(a); // 输出2a %= 3; // 相当于 a = a % 2
System.out.println(a); // 输出2
注意:只有变量才能使用该运算符,常量不能使用。

2.1自增/自减运算符

递增运算符有两种形式:前缀递增和后缀递增。 前缀递增运算符(++x) 将先将变量的值增加1,然后返回增加后的值。 后缀递增运算符(x++) 将返回变量的原始值,然后再将其增加1。递减运算符也有类似的前缀和后缀形式。
具体例子如下:
int x = 5;// 前缀递增
int y = ++x;
// y的值为6,x的值也为6// 后缀递增
int z = x++;
// z的值为6,x的值变为7// 前缀递减
int a = --x;
// a的值为6,x的值变为6// 后缀递减
int b = x--;
// b的值为6,x的值变为5

增量运算符在编程中常用于循环、条件语句和其他需要对变量进行递增或递减的场景。它们提供了一种简洁和方便的方式来更新变量的值。

3. 关系运算符

关系运算符用于比较两个值之间的关系,并返回一个布尔值(true或false)。下面是一些常见的关系运算符及其用法:

int a = 10;
int b = 5;boolean isEqual = a == b;      // 相等运算
boolean isNotEqual = a != b;   // 不相等运算
boolean isGreater = a > b;     // 大于运算
boolean isLess = a < b;        // 小于运算
boolean isGreaterOrEqual = a >= b; // 大于等于运算
boolean isLessOrEqual = a <= b;    // 小于等于运算

注意:当需要多次判断时,不能连着写,比如:3 < a < 5,Java程序与数学中是有区别的。

4. 逻辑运算符

当需要在条件语句或布尔表达式中进行逻辑判断时,通过逻辑运算符来操作布尔值(true或false)。

1.逻辑与运算符(&&)
逻辑与运算符表示两个条件都必须为true时,整个表达式才为true。如果任意一个条件为false,则整个表达式为false。

boolean a = true;
boolean b = false;
boolean result = a && b;  // 结果为false,因为b为false

逻辑或运算符(||)
逻辑或运算符表示两个条件中至少一个为true时,整个表达式就为true。只有两个条件都为false时,整个表达式才为false。

boolean a = true;
boolean b = false;
boolean result = a || b;  // 结果为true,因为a为true

逻辑非运算符(!)
逻辑非运算符用于取反操作,将true变为false,将false变为true。

boolean a = true;
boolean result = !a;  // 结果为false,因为a为true

短路求值

逻辑与运算符(&&)和逻辑或运算符(||)都具有短路求值的特性。短路求值指的是当根据第一个条件的结果可以确定整个表达式的结果时,将不再计算第二个条件。

注意两点:

  1. 对于逻辑与运算符(&&),如果第一个条件为false,则整个表达式一定为false,不会执行第二个条件的计算。
  2. 对于逻辑或运算符(||),如果第一个条件为true,则整个表达式一定为true,不会执行第二个条件的计算。

boolean a = true;
boolean b = false;
boolean result = a || (b && someOtherCondition);  // 如果a为true,则整个表达式为true,不会计算第二个条件

作用:短路求值可以提高程序的性能,并且在某些情况下避免不必要的计算。逻辑运算符在控制流语句、条件语句和布尔表达式中起着重要的作用。它们允许我们进行复杂的逻辑判断和条件组合,从而控制程序的行为。了解逻辑运算符的含义和用法对于编写正确和可读性强的代码至关重要。

5.位运算符

按位与 &: 如果两个二进制对应位都是 1, 则结果为 1, 否则结果为 0 。

12 & 512:  00001100
5:   00000101
-------------00000100
结果: 00000100 (4)

按位或(|): 如果两个二进制位都是 0, 则结果为 0, 否则结果为 1

12 | 512:  00001100
5:   00000101
--------------00001101
结果: 00001101 (13)

注意 :
当 & | 的操作数为整数(int, short, long, byte) 的时候, 表示按位运算, 当操作数为 boolean 的时候, 表 示逻辑运算.

按位取反 ~: 如果该位为 0 则转为 1, 如果该位为 1 则转为 0
~1212:  00001100
------------
结果: 11110011 (-13)

注意事项:

1. 0x 前缀的数字为 十六进制 数字. 十六进制可以看成是二进制的简化表示方式. 一个十六进制数字对应 4 个二进制位。
2. 0xf 表示 10 进制的 15, 也就是二进制的 1111。
3.printf 能够格式化输出内容, %x 表示按照十六进制输出
4.\n 表示换行符

 按位异或 ^: 如果两个数字的二进制位相同, 则结果为 0, 相异则结果为 1

12 ^ 512:  00001100
5:   00000101
--------------00001001
结果: 00001001 (9)

注意:如果两个数相同,则异或的结果为0 


6.移位运算符  

移位运算符有三个 : << , >>, >>> ,都是二元运算符,且都是按照二进制比特位来运算的。

 1. 左移 <<: 最左侧位不要了, 最右侧补 0.

12 << 212:  00001100
------------
结果: 00110000 (48)

2. 右移 >>: 最右侧位不要了, 最左侧补符号位(正数补0,负数补1) 

12 >> 212:  00001100
------------
结果: 00000011 (3)

3.无符号右移 >>>: 最右侧位不要了, 最左侧补 0.  

-12 >>> 2-12:  11110011
------------
结果: 00111100 (60)
注意:
1. 左移 1 位, 相当于原数字 * 2. 左移 N 位, 相当于原数字 * 2 的N次方.
2. 右移 1 位, 相当于原数字 / 2. 右移 N 位, 相当于原数字 / 2 的N次方.
3. 由于计算机计算移位效率高于计算乘除, 当某个代码正好乘除 2 的N次方的时候可以用移位运算代替.
4. 移动负数位或者移位位数过大都没有意义.

 7. 条件运算符

条件运算符只有一个 : 三目运算符

结构为:条件 ? 结果1 : 结果2

如果条件为true,那么整个表达式的结果就是结果1;如果条件为false,则结果就是结果2。

可以将条件运算符理解为一个问答游戏。条件是一个问题,如果回答为true,我们就选择结果1作为答案;如果回答为false,我们就选择结果2作为答案。

这是一个具体的例子:
 

int age = 20;
String message = (age >= 18) ? "成年人" : "未成年人";

在上面的例子中,我们根据年龄的条件判断选择不同的信息。如果年龄大于或等于18岁,我们选择"成年人"作为信息;否则,我们选择"未成年人"作为信息。

好的,内容就到这里,如果以上有错误的地方恳请在评论区指出,如果我帮助到你,希望你也可以三连支持一下,谢谢。堆糖同学会很赞同的。

相关文章:

从初学者到专家:Java运算符的完整指南

目录 1.算数运算符 2.增量运算符 2.1自增/自减运算符 4. 逻辑运算符 5.位运算符 6.移位运算符 7. 条件运算符 导言&#xff1a; Java作为一门广泛使用的编程语言&#xff0c;其运算符是编写代码时必不可少的一部分。本篇博客将为你详细介绍Java中的各种运算符&#xf…...

Linux:shell脚本:基础使用(3)

for循环语句 语句格式 for for变量 in 取值列表&#xff08;可以是变量或者自己定义&#xff09; do 循环内容 done 工作方式就是通过取值列表去判断循环的次数&#xff0c;每次循环的同时把列表一行的值赋予到for变量。取值方式如果是数字&#xff0c;那就通过数字去…...

opencv基础46-图像金字塔02-拉普拉斯金字塔

前面我们介绍了高斯金字塔&#xff0c;高斯金字塔是通过对一幅图像一系列的向下采样所产生的。有时&#xff0c;我们希望通过对金字塔中的小图像进行向上采样以获取完整的大尺寸高分辨率图像&#xff0c;这时就需要用到拉普拉斯金字塔 前面我们已经介绍过&#xff0c;一幅图像在…...

到 2030 年API 攻击预计将激增近 1000%

导读云原生应用程序编程接口管理公司 Kong 联合外部经济学家的最新研究预计&#xff0c;截至 2030 年 API 攻击将激增 996%&#xff0c;意味着与 API 相关的网络威胁的频率和强度都显着升级。 这项研究由 Kong 分析师和布朗大学副教授 Christopher Whaley 博士合作进行&#x…...

环形队列+DMA空闲中断+接收串口数据

环形队列DMA空闲中断接收串口数据 一.序言二.实验原理三.实战是检验真理的唯一标准3.1 usart1.c3.2 串口中断 三.队列代码4.1 fifo.c4.2 fifo.h 五.结语 一.序言 本次实验利用环形队列DMA空闲中断串口。。通过这个实验可以非常深入的理解队列&#xff0c;DMA,串口的知识。如果…...

LeetCode 31题:下一个排列

目录 题目 思路 代码 题目 整数数组的一个 排列 就是将其所有成员以序列或线性顺序排列。 例如&#xff0c;arr [1,2,3] &#xff0c;以下这些都可以视作 arr 的排列&#xff1a;[1,2,3]、[1,3,2]、[3,1,2]、[2,3,1] 。 整数数组的 下一个排列 是指其整数的下一个字典序…...

CMake:检测python模块和包

CMake:检测python模块和包 导言项目结构CMakeLists.txt相关源码 导言 上一篇&#xff0c;我们基本了解了如何去检测python的解释器和python库。通常&#xff0c;代码是依赖于特定的python模块&#xff0c;无论是python工具、嵌入python的程序&#xff0c;还是扩展python的库。…...

02Mysql之多表查询--例题讲解

一、题目详情&#xff0c;以及表的建立 新增员工表emp和部门表deptcreate table dept (dept1 int ,dept_name varchar(11));create table emp (sid int ,name varchar(11),age int,worktime_start date,incoming int,dept2 int);insert into dept values(101,财务),(102,销售)…...

虹科方案 | 汽车总线协议转换解决方案

汽车总线&#xff1a; 汽车总线是一种用于在车辆电子系统中传输数据和控制信息的通信系统。它允许不同的电子控制单元&#xff08;ECU&#xff09;在车辆中相互通信&#xff0c;协调各个系统的操作&#xff0c;以实现功能的集成和协同工作。 在现代汽车中&#xff0c;综合通信…...

Mr. Cappuccino的第59杯咖啡——简单手写SpringIOC框架

简单手写SpringIOC框架 环境搭建基于XML方式项目结构项目代码运行结果 基于注解方式项目结构项目代码运行结果 简单手写SpringIOC框架核心原理基于XML方式原理项目结构项目代码运行结果 基于注解方式原理项目结构项目代码运行结果 环境搭建 基于XML方式 项目结构 项目代码 p…...

爬虫 学习HTML标签和元素的基本概念,了解网页的结构和内容

HTML&#xff08;Hypertext Markup Language&#xff09;是一种用于创建网页的标记语言&#xff0c;由一系列的标签组成。标签使用尖括号&#xff08;< 和 >&#xff09;包围&#xff0c;并且通常成对出现&#xff0c;一个是开始标签&#xff0c;一个是结束标签。 HTML文…...

mysql将id重新修改为递增

文章目录 场景解决,排序的话可以先按照一定大小改一下,然后将id字段删掉,再重新生成即可清空表数据,并将自增id改为1开始 场景 好比我有个配置表: CREATE TABLE config (id int NOT NULL AUTO_INCREMENT,config_key varchar(20) NOT NULL,config_value varchar(500) NOT NU…...

http、https笔记

目录 HTTP 基本概念状态码&#xff1a;get和post的区别&#xff1a;http 常⻅字段&#xff1a;http的缺点&#xff1a; HTTP/1.1HTTP/3HTTPSHTTPS和HTTP区别对称加密和⾮对称加密⾮对称加密 HTTP 基本概念 状态码&#xff1a; 1xx 中间状态&#xff0c;比如post的continue 20…...

飞凌嵌入式「国产」嵌入式核心板大盘点(三)——龙芯中科、赛昉科技

为了帮助各位工程师朋友详细了解飞凌嵌入式推出的“国产化”产品&#xff0c;小编专门开设了「国产平台大盘点专题」。上周&#xff0c;已经带大家盘点了飞凌嵌入式联合瑞芯微电子和全志科技两个国产处理器品牌打造的平台&#xff0c;今天&#xff0c;将继续为大家介绍龙芯和赛…...

以vue2为例,用npm开发环境在后端部署vue2项目(更推荐使用nginx部署)

因为之前一致出现的跨域问题&#xff0c;从而想到了这个办法&#xff0c;属于偏方。推荐使用nginx部署&#xff0c;再去解决跨域问题。 接下来聊一聊本文所使用的方法。 首先将你的前端vue项目拷贝一份到服务器&#xff0c;准备一个dockerfile文件&#xff0c;用这个进行部署首…...

docker容器监控:Cadvisor +Prometheus+Grafana的安装部署

目录 Cadvisor PrometheusGrafana的安装部署 一、安装docker&#xff1a; 1、安装docker-ce 2、阿里云镜像加速器 3、下载组件镜像 4、创建自定义网络 二、部署Cadvisor 1、被监控主机上部署Cadvisor容器 2、访问cAdvisor页面 三、安装prometheus 1、部署Prometheus…...

前端食堂技术周刊第 93 期:7 月登陆 Web 平台的新功能、Node.js 工具箱、Nuxt3 开发技巧、MF 重构方案

美味值&#xff1a;&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f; 口味&#xff1a;橙橙冰萃美式 食堂技术周刊仓库地址&#xff1a;https://github.com/Geekhyt/weekly 大家好&#xff0c;我是童欧巴。欢迎来到前端食堂技术周刊&#xff0c;我们先来…...

获取 Android 的 SHA1 值

1、调试版&#xff0c;可以直接在 Android studio 中的 gradle 中查看。也可以用下面方法进行 前提要先确定签名文件所在的路径&#xff1a;调试版默认使用的签名文件是debug.keystore&#xff0c;文件处于 C 盘用户目录下的.android文件夹下。打开命令行工具&#xff0c; 1、…...

! [remote rejected] develop -> develop (pre-receive hook declined)

问题 git push 远程提交dao develop 分支失败&#xff0c;出现下面错误信息 remote: GitLab: You are not allowed to push code to protected branches on this project. To https://xxx.com.cn/xxx/xxx/xxx/xxx.git/! [remote rejected] develop -> develop (pre-receiv…...

最强的表格组件—AG Grid使用以及License Key Crack

PS: 想要官方 License Key翻到最后面 Ag Grid简介 Ag-Grid 是一个高级数据网格&#xff0c;适用于JavaScript/TypeScript应用程序&#xff0c;可以使用React、Angular和Vue等流行框架进行集成。它是一种功能强大、灵活且具有高度可定制性的表格解决方案&#xff0c;提供了丰富…...

HTML 语义化

目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案&#xff1a; 语义化标签&#xff1a; <header>&#xff1a;页头<nav>&#xff1a;导航<main>&#xff1a;主要内容<article>&#x…...

CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型

CVPR 2025 | MIMO&#xff1a;支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题&#xff1a;MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者&#xff1a;Yanyuan Chen, Dexuan Xu, Yu Hu…...

基于FPGA的PID算法学习———实现PID比例控制算法

基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容&#xff1a;参考网站&#xff1a; PID算法控制 PID即&#xff1a;Proportional&#xff08;比例&#xff09;、Integral&#xff08;积分&…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件&#xff0c;常用于在两个集合之间进行数据转移&#xff0c;如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model&#xff1a;绑定右侧列表的值&…...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法&#xff0c;用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理&#xff0c;能够自动确定一个阈值&#xff0c;将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

汇编常见指令

汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX&#xff08;不访问内存&#xff09;XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3

一&#xff0c;概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本&#xff1a;2014.07&#xff1b; Kernel版本&#xff1a;Linux-3.10&#xff1b; 二&#xff0c;Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01)&#xff0c;并让boo…...

大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计

随着大语言模型&#xff08;LLM&#xff09;参数规模的增长&#xff0c;推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长&#xff0c;而KV缓存的内存消耗可能高达数十GB&#xff08;例如Llama2-7B处理100K token时需50GB内存&a…...

探索Selenium:自动化测试的神奇钥匙

目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...

永磁同步电机无速度算法--基于卡尔曼滤波器的滑模观测器

一、原理介绍 传统滑模观测器采用如下结构&#xff1a; 传统SMO中LPF会带来相位延迟和幅值衰减&#xff0c;并且需要额外的相位补偿。 采用扩展卡尔曼滤波器代替常用低通滤波器(LPF)&#xff0c;可以去除高次谐波&#xff0c;并且不用相位补偿就可以获得一个误差较小的转子位…...