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

【JAVASE】运算符

⭐ 作者:小胡_不糊涂
🌱 作者主页:小胡_不糊涂的个人主页
📀 收录专栏:浅谈Java
💖 持续更文,关注博主少走弯路,谢谢大家支持 💖

运算符

  • 1. 什么是运算符
  • 2. 算术运算符
  • 3. 关系运算符
  • 4. 逻辑运算符
  • 5. 位运算符
  • 6. 移位运算符
  • 7. 条件运算符
  • 8. 运算符的优先级

1. 什么是运算符

计算机的最基本的用途之一就是执行数学运算,比如:

int a = 10;
int b = 20;
a + b;
a < b;

上述 + 和 < 等就是运算符,即:对操作数进行操作时的符号,不同运算符操作的含义不同。

作为一门计算机语言,Java也提供了一套丰富的运算符来操纵变量。Java中运算符可分为以下:算术运算符**(+ - * /)、关系运算符(< > ==)**、逻辑运算符、位运算符、移位运算符以及条件运算符等。

2. 算术运算符

1. 基本四则运算符:加减乘除模(+ - * / %)

int a = 20;
int b = 10;
System.out.println(a + b); 
System.out.println(a - b); 
System.out.println(a * b); 
System.out.println(a / b);
System.out.println(a % b); // % 模运算相当于数学中除法的余数

运行结果:

在这里插入图片描述

注:

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

int / int 结果还是int类型,而且会向下取整
请看这段代码:

int a = 3;
int b = 2;
System.out.println(a / b);

运行结果:

在这里插入图片描述
有些人可能会好奇,3/2 应该是 1.5 ,这里的输出结果为什么是 1 ,这是因为 int / int 结果还是int类型,而且会向下取整,即小数点之后全部舍弃掉了。

如果要得到 1.5 ,应该这样修改:

在这里插入图片描述

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

例如:

int a = 1;
int b = 0;
System.out.println(a / b)

运行结果:

在这里插入图片描述

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

System.out.println(11.5 % 2.0)

在这里插入图片描述

我们已经知道这些运算符的运算规则了,看看下面计算,你能做对吗?

System.out.println(5/2);
System.out.println((float)5/2);
System.out.println(5/(float)2);
System.out.println((float)(5/2));System.out.println(10%3);
System.out.println(-10%3);
System.out.println(10%-3);
System.out.println(-10%-3);

答案 ↓ :
在这里插入图片描述

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

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 / 3
System.out.println(a); // 输出2a %= 3; // 相当于 a = a % 2
System.out.println(a); // 输出2

只有变量才能使用该运算符,常量不能使用。

3. 自增/自减运算符 ++ –
++是给变量的值+1,–是给变量的值-1。

int a = 1;
a++; // 后置++ 表示给a的值加1,此时a的值为2
System.out.println(a++); // 注意:后置++是先使用变量原来值,表示式结束时给变量+1,因此输出2
System.out.println(a); // 输出3++a; // 前置++ 表示给a的值加1
System.out.println(++a); // 注意:前置++是先给变量+1,然后使用变量中的值,因此输出5
System.out.println(a); // 输出5// -- 操作符给操作-1,与++含义类似

在这里插入图片描述

注:

  • 如果单独使用,【前置++】和【后置++】没有任何区别
  • 如果混合使用,【前置++】先+1,然后使用变量+1之后的值,【后置++】先使用变量原来的值,表达式结束时给变量+1
  • 只有变量才能使用自增/自减运算符,常量不能使用,因为常量不允许被修改

3. 关系运算符

关系运算符主要有六个: == != < > <= >= ,其计算结果是 true 或者 false 。

例如:

int a = 10;
int b = 20;
// 注意:在Java中 = 表示赋值,要与数学中的含义区分
// 在Java中 == 表示相等
System.out.println(a == b); 
System.out.println(a != b); 
System.out.println(a < b); 
System.out.println(a > b); 
System.out.println(a <= b); 
System.out.println(a >= b); 

运行结果:

在这里插入图片描述
注:
当需要多次判断时,不能连着写,比如:3 < a < 5,需要用到下面的逻辑运算符 3<a && a<5

4. 逻辑运算符

逻辑运算符主要有三个: && || ! ,运算结果都是 boolean 类型(false 或 true)。

1. 逻辑与 &&

语法规则:表达式1 && 表达式2,左右表达式必须是 boolean 类型的结果。
两个表达式都为真,结果才是真,只要有一个是假,结果就是假。

表达式 1表达式 2结果

例如:

int a = 1;
int b = 2;
System.out.println(a == 1 && b == 2); // 左为真 且 右为真 则结果为真
System.out.println(a == 1 && b > 100); // 左为真 但 右为假 则结果为假
System.out.println(a > 100 && b == 2); // 左为假 但 右为真 则结果为假
System.out.println(a > 100 && b > 100); // 左为假 且 右为假 则结果为假

运行结果:

在这里插入图片描述
2. 逻辑 ||

语法规则:表达式1 || 表达式2,左右表达式必须是 boolean 类型的结果。
左右表达式至少有一个位真,则结果为真。

表达式 1表达式 2结果

例如:

int a = 1;
int b = 2;
System.out.println(a == 1 || b == 2); // 左为真 且 右为真 则结果为真
System.out.println(a == 1 || b > 100); // 左为真 但 右为假 则结果也为真
System.out.println(a > 100 || b == 2); // 左为假 但 右为真 则结果也为真
System.out.println(a > 100 || b > 100); // 左为假 且 右为假 则结果为假

运行结果:

在这里插入图片描述
3. 逻辑非 !

语法规则:! 表达式
真变假,假变真

表达式 1结果

例如:

int a = 1;
System.out.println(!(a == 1)); // a == 1 为true,取个非就是false
System.out.println(!(a != 1)); // a != 1 为false,取个非就是true

运行结果:

在这里插入图片描述

4. 短路求值
&& 和 || 遵守短路求值的规则。

例如:

System.out.println(10>20 && 10/0==0);       //打印false 
System.out.println(10<20 || 10/0==0);       //打印true

我们都知道,计算 10 / 0 会导致程序抛出异常,但是上面的代码却能正常运行,说明 10 / 0 并没有真正被求值,只判断了 10<20。

注:

  • 对于 && ,如果左侧表达式值为 false,则表达式结果一定是 false,无需计算右侧表达式。
  • 对于 ||,如果左侧表达式值为 true,则表达式结果一定是 true,无需计算右侧表达式。
  • & 和 | 如果表达式结果为 boolean 时,也表示逻辑运算。但与 && || 相比,它们不支持短路求值。

5. 位运算符

Java 中数据存储的最小单位是字节,而数据操作的最小单位是比特位,字节是最小的存储单位,每个字节是由8个二进制比特位组成的,多个字节组合在一起可以表示各种不同的数据。

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

位操作表示按二进制位运算,计算机中都是使用二进制来表示数据的( 0 1 构成的序列),按位运算就是在按照二进制位的每一位依次进行计算。

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

例如:

int a = 10;
int b = 20;
System.out.println(a & b);

进行按位运算,要先把 10 和 20 转成二进制,分别为 1010 和 10100,计算过程如下图:

在这里插入图片描述
2. 按位或 |:如果两个二进制位都是 0,则结果为 0,否则结果为 1

运算方式和按位与类似,如下图所示:

在这里插入图片描述

注:

  • 当 & 和 | 的操作数为整数(int, short, long, byte) 的时候,表示按位运算
  • 当操作数为 boolean 的时候,表示逻辑运算
    3. 按位取反 ~:如果该位为 0 则转为 1, 如果该位为 1 则转为 0
    例如:
int a = 0xf;
System.out.printf("%x\n", ~a)

图解:int 型占 4 字节,1 字节 = 8 比特位,总共 32 个比特位

在这里插入图片描述

运行结果:

在这里插入图片描述

注:

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

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

int a = 0x1;
int b = 0x2;
System.out.printf("%x\n", a ^ b);

图解:
在这里插入图片描述
运行结果:

在这里插入图片描述

6. 移位运算符

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

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

int a = 0x10;
System.out.printf("%x\n", a << 1);
// 运行结果按十六进制打印

图解:

在这里插入图片描述

运行结果:

在这里插入图片描述
向左移位时,丢弃的是符号位,因此正数左移可能会编程负数

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

int a = 0x10;
System.out.printf("%x\n", a >> 1);
// 运行结果按十六进制打印

图解:

在这里插入图片描述

运行结果:

在这里插入图片描述

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

int a = 0xffffffff;
System.out.printf("%x\n", a >>> 1);

运行结果:

在这里插入图片描述

注:

  • 左移 1 位,相当于原数字 * 2. 左移 N 位,相当于原数字 * 2 的N次方
  • 右移 1 位,相当于原数字 / 2. 右移 N 位,相当于原数字 / 2 的N次方
  • 由于计算机计算移位效率高于计算乘除,当某个代码正好乘除 2 的N次方的时候可以用移位运算代替
  • 移动负数位或者移位位数过大都没有意义

7. 条件运算符

条件运算符只有一个:
表达式1 ? 表达式2 : 表达式3

  • 当 表达式1 的值为 true 时,整个表达式的值为 表达式2 的值
  • 当 表达式1 的值为 false 时,整个表达式的值为 表达式3 的值
  • 也是 Java 中唯一的一个 三目运算符,是条件判断语句的简化写法

例如:求两个整数的最大值

int a = 10;
int b = 20;
int max = a > b ? a : b;
System.out.println(max);

运行结果:

在这里插入图片描述

注:

  • 表达式2和表达式3的结果要是同类型的,除非能发生类型隐式类型转换
  • 表达式不能单独存在,其产生的结果必须要被使用
int a = 10;
int b = 20;
a > b? a : b; // 报错:Error:(15, 14) java: 不是语句

8. 运算符的优先级

在一条表达式中,各个运算符可以混合起来进行运算,但是运算符的优先级不同,比如:* 和 / 的优先级要高于 +和 - 。

观察下段代码是否正确:

// 求a和b的平均值
int a = 10;
int b = 20;
int c = a + (b - a) >> 1;//右移一位相当于 /2
System.out.println(c);

运行结果:

在这里插入图片描述
为什么结果和我们想的不一样?

这是因为在上述表达式中,由于 + 的优先级要高于 >> ,因此 a 先和 b-a 的结果做加法,整体为20,最后再进行右移,因此结果为 10 。

为了不被优先级干扰,我们可以在恰当的位置加上括号:

int a = 10;
int b = 20;
int c = a +( (b - a) >> 1 );//右移一位相当于 /2
System.out.println(c);

运行结果:

在这里插入图片描述


在这里插入图片描述

相关文章:

【JAVASE】运算符

⭐ 作者&#xff1a;小胡_不糊涂 &#x1f331; 作者主页&#xff1a;小胡_不糊涂的个人主页 &#x1f4c0; 收录专栏&#xff1a;浅谈Java &#x1f496; 持续更文&#xff0c;关注博主少走弯路&#xff0c;谢谢大家支持 &#x1f496; 运算符 1. 什么是运算符2. 算术运算符3.…...

Emacs之改造搜索文件fd-dired(基于fd命令)(一百二十一)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…...

字典序排数(力扣)思维 JAVA

给你一个整数 n &#xff0c;按字典序返回范围 [1, n] 内所有整数。 你必须设计一个时间复杂度为 O(n) 且使用 O(1) 额外空间的算法。 示例 1&#xff1a; 输入&#xff1a;n 13 输出&#xff1a;[1,10,11,12,13,2,3,4,5,6,7,8,9] 示例 2&#xff1a; 输入&#xff1a;n 2 输…...

NLP 中的pad/padding操作代码分析

今天分析一下NLP中的pad操作代码&#xff1a; 该方法的作用是将输入的序列列表seqs进行填充操作&#xff0c;使其具有相同的长度&#xff0c;以便进行批处理。填充使用指定的pad_token进行&#xff0c;并生成一个对应的mask标志列表&#xff0c;用于标记哪些部分是填充内容&am…...

JavaWeb 速通HTTP

目录 一、HTTP快速入门 1.HTTP简介 : 2.HTTP请求头 : 3.HTTP响应头 : 二、HTTP响应状态码 1.基本介绍 : 2.常见状态码 : 3.状态码的分类 : 4.完整状态码汇总 : 三、HTTP请求包和响应包 1.请求包分析 : 1 GET请求 (1) 说明 (2) doGet返回数据给浏览器 (3) form表单提…...

Vue 本地应用 图片切换 v-show v-bind实践

点击切换图片的本质&#xff0c;其实修改的是img标签的src属性。 图片的地址有很多个&#xff0c;在js当中通过数组来保存多个数据&#xff0c;数组的取值结合索引&#xff0c;根据索引可以来判断是否是第一张还是最后一张。 图片的变化本质是src属性被修改了&#xff0c;属性…...

AI生成-- autocomplete 模糊搜索

el-autocomplete可以通过设置属性来实现模糊搜索功能。 首先需要设置一个搜索函数&#xff0c;即在输入框输入内容时会调用的函数&#xff0c;用来返回所有符合条件的结果。这个函数需要接收两个参数&#xff1a;输入框的值和一个回调函数。 <el-autocompletev-model"…...

怎么用手机做文字二维码?文本内容在线生成二维码技巧

手机端怎么将文字制作二维码呢&#xff1f;现在二维码是日常生活中经常会使用的一种工具&#xff0c;能够将不同的内容生成二维码使用&#xff0c;比如文本二维码就是常用的一种类型。那么当我们在没有电脑的情况下时&#xff0c;如何通过手机来快速生成二维码&#xff08;二维…...

【Ap模块EM】08-怎么让Execution Management成为第一个执行的进程?

前面的文章,我们讲述了ubuntu系统上电执行的流程,那么在Ap AutoSAR中Execution Management怎么成为第一个被执行的进程呢额?就是让它取代传统的init进程,成为ubuntu系统第一个执行的进程? 我们可以通过符号链接 symbolic link去实现,这个类似于windows系统中的某个exe文件…...

使用vscode+platformio搭建arduino开发环境

存在的问题&#xff1a; Arduino编译时会将所有的C文件都编译一遍造成编译很慢&#xff0c;一个简单的工程稍加修改有可能都需要三四分钟才能编译完成&#xff0c;同时arduino也不支持代码跳转查看功能&#xff0c;不方便代码查看。 解决方法&#xff1a; 使用vscodeplatfor…...

java后端接口实现302跳转

正常来说&#xff0c;接口返回String是"redirect:"url或者“r:”url就能实现前端接收到返回后自动302.但是我在自己的一个项目中这么写了之后发现返回的是纯字符串&#xff0c;很奇怪。 最后发现&#xff0c;如果你的controller层有RestController注解&#xff0c;那…...

分布式理论:CAP理论 BASE理论

文章目录 1. CAP定理1.1 一致性1.2 可用性1.3 分区容错1.4 矛盾 2. BASE理论3. 解决分布式事务的思路4. 扩展 解决分布式事务问题&#xff0c;需要一些分布式系统的基础知识作为理论指导。 1. CAP定理 Consistency(一致性): 用户访问分布式系统中的任意节点&#xff0c;得到的…...

Tensorflow学习

一、处理数据的结构 案例代码如下: import tensorflow.compat.v1 as tf tf.disable_v2_behavior() import numpy as np# create data x_data np.random.rand(100).astype(np.float32) y_data x_data*0.1 0.3# 创建结构(一维结构) Weights tf.Variable(tf.random.uniform(…...

5-Ngnix配置基于用户访问控制和IP的虚拟主机

目录 5.1.Ngnix配置基于用户访问控制的多虚拟主机 5.1.1.前提条件 5.1.2.Ngnix配置基于用户访问控制的多虚拟主机 5.2.Ngnix配置基于IP的虚拟主机 5.3.Ngnix配置基于IP的多虚拟主机 Nginx配置文件在/usr/local/nginx/conf下&#xff0c;文件名为nginx.conf 5.1.Ngnix配置…...

springboot jar分离部署

springboot jar分离部署 注意&#xff1a;spring boot web项目别使用jsp页面&#xff0c;可以使用模板代替&#xff0c;jsp打包时访问页面会报404错误。 1.具体配置如下&#xff1a; <build><plugins><!--更换maven的jar打包插件先前使用的是spring-boot-mav…...

Opencv 细节补充

1.分辨率的解释 •像素&#xff1a;像素是分辨率的单位。像素是构成位图图像最基本的单元&#xff0c;每个像素都有自己的颜色。 •分辨率&#xff08;解析度&#xff09;&#xff1a; a) 图像分辨率就是单位英寸内的像素点数。单位为PPI(Pixels Per Inch) b) PPI表示的是每英…...

内存泄漏专题(7)hook之宏定义

前面介绍的mtrace也好&#xff0c;bcc也罢&#xff0c;其实都是hook技术的一种实现&#xff0c;但是mtrace本身使用场景上有局限&#xff0c;而bcc环境依赖则十分复杂。因此&#xff0c;这些调试手段只适用于开发环境用来调试&#xff0c;对于生产环境&#xff0c;均不是一个非…...

Python 基础(十八):异常处理

❤️ 博客主页&#xff1a;水滴技术 &#x1f338; 订阅专栏&#xff1a;Python 入门核心技术 &#x1f680; 支持水滴&#xff1a;点赞&#x1f44d; 收藏⭐ 留言&#x1f4ac; 文章目录 一、异常是什么&#xff1f;二、异常处理的基本语法三、捕获特定的异常类型四、finall…...

iTOP-RK3568开发板Docker 安装 Ubuntu 18.04

Docker 下载安装 Ubuntu18.04&#xff0c;输入以下命令&#xff1a; sudo apt update docker pull ubuntu:18.04 切换 Shell 到 Ubuntu 18.04&#xff0c;输入以下命令&#xff1a; docker container run -p 8000:3000 -it ubuntu:18.04 /bin/bash -p 参数&#xff1a;容器的…...

FFmpeg AVFilter的原理(三)- filter是如何被驱动的

首先上官方filter的链接&#xff1a;https://ffmpeg.org/ffmpeg-filters.html 关于filter命令行&#xff1a;FFmpeg-4.0 的filter机制的架构与实现.之一 Filter原理 1、下面是一个avfilter的graph 上图是ffmpeg中doc/examples中filtering_video.c案例的示意图。 特别注意上面蓝…...

别再让预制体‘撞衫’了!用MaterialPropertyBlock给每个Unity实例穿上‘定制皮肤’

别再让预制体‘撞衫’了&#xff01;用MaterialPropertyBlock给每个Unity实例穿上‘定制皮肤’ 在游戏开发中&#xff0c;预制体&#xff08;Prefab&#xff09;是提高效率的利器&#xff0c;但当我们需要为大量相同预制体创建不同外观时&#xff0c;传统方法往往面临性能与灵活…...

Bootstrap5 轮播详解

Bootstrap5 轮播详解 Bootstrap 5 是一个流行的前端框架,它提供了丰富的组件和工具,帮助开发者快速构建响应式网站。在Bootstrap 5中,轮播组件(Carousel)得到了极大的改进,使得创建美观、互动性强的轮播图变得更加简单。本文将详细介绍Bootstrap 5轮播组件的使用方法、配…...

内容管理系统 CMS 发展史:从静态建站到 2026 智能一体化协同平台

内容管理系统&#xff08;CMS&#xff09;作为支撑互联网内容生态的核心基础软件&#xff0c;自诞生以来已走过 30 余年历程。它始终紧跟技术浪潮与市场需求&#xff0c;从最初简单的静态页面制作工具&#xff0c;逐步演进为集内容管理、低代码开发、智能分析、多端分发于一体的…...

ComfyUI Essentials:填补ComfyUI核心缺失功能的必备插件指南

ComfyUI Essentials&#xff1a;填补ComfyUI核心缺失功能的必备插件指南 【免费下载链接】ComfyUI_essentials 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI_essentials ComfyUI Essentials是一款专门为ComfyUI用户设计的插件&#xff0c;它提供了ComfyUI核心…...

内页SEO优化与网站整体优化的关系是什么_网站内页的图片优化需要注意哪些

内页SEO优化与网站整体优化的关系是什么 在当前竞争激烈的互联网环境中&#xff0c;网站的整体优化和内页SEO优化密不可分。内页SEO优化是提升网站整体排名的关键环节&#xff0c;而网站整体优化则为内页SEO提供了坚实的基础。这两者之间的关系可以从多个方面进行探讨&#xf…...

你的Selenium爬虫被‘环境调试’弹窗卡住了吗?试试先清理浏览器缓存和Cookie

Selenium爬虫环境指纹污染解决方案&#xff1a;从缓存清理到浏览器隔离 环境指纹污染&#xff1a;爬虫开发者面临的新挑战 上周三凌晨3点&#xff0c;我的自动化数据采集系统突然发出警报——所有Selenium爬虫实例同时失效&#xff0c;目标网站清一色返回"环境异常"提…...

告别重复劳动:用快马ai为ubuntu系统生成自动化运维效率工具

告别重复劳动&#xff1a;用快马AI为Ubuntu系统生成自动化运维效率工具 作为一名长期使用Ubuntu系统的开发者&#xff0c;我经常需要处理各种重复性的运维任务&#xff0c;比如查看日志、备份文件、监控系统资源等。这些工作虽然简单&#xff0c;但日复一日地手动操作不仅耗时…...

Palworld存档工具:高效解决游戏存档格式转换与数据解析的技术方案

Palworld存档工具&#xff1a;高效解决游戏存档格式转换与数据解析的技术方案 【免费下载链接】palworld-save-tools Tools for converting Palworld .sav files to JSON and back 项目地址: https://gitcode.com/gh_mirrors/pa/palworld-save-tools Palworld存档工具是…...

2026届毕业生推荐的五大降AI率网站解析与推荐

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 从以下方面着手&#xff0c;能够降低AIGC&#xff08;人工智能生成内容&#xff09;的检测特…...

如何用一个USB设备打造你的随身操作系统实验室?Portable-VirtualBox全攻略

如何用一个USB设备打造你的随身操作系统实验室&#xff1f;Portable-VirtualBox全攻略 【免费下载链接】Portable-VirtualBox Portable-VirtualBox is a free and open source software tool that lets you run any operating system from a usb stick without separate instal…...