Java中所有的运算符,以及运算符优先级(总结)

运算法是一种特殊的符号,用于表示数据的运算、复制、比较等。

1、算数运算符

// % 取余运算:结果的符号和被模数的符号一致
12 % 5 == 2
-12 % 5 == -2
12 % -5 == 2
-12 % -5 == -2

int a1 = 10;
int b1 = ++a1;  // a1=11, b1=11
int a2 = 10;
int b2 = a2++;  // a2=11, b2=10

short s1 = 10;
s1++;  // 自增1,不会改变原本的数据类型
System.out.println(s1);  // 11

byte b1 = 127;
b1++;
System.out.println(b1);  // -128

负数补码变回原码:

方法1:减去1,符号位为1,其余位全部取反

方法2:由最低位(右)向高位(左)查找到第一个1与符号位之间的所有数字,按位取反

127 补码=原码:01111111, 127 + 1: 10000000

方法1:减1得 01111111,符号位为1其余为取反得 10000000

方法2: 第一个1已经是最后一个,因此没有数字需要取反,得到 10000000

在源码里面00000000和100000000都是表示0,这样比较浪费, 所以在补码里面,就把100000000当做 -2^7 ,以扩大补码表示范围

2、赋值运算符

赋值运算符:= (支持连续赋值)

扩展赋值运算符:+=   -=   *=   /=    %/

int j1, j2;
j1 = j2 = 3;

short s1 = 10;
s1 += 2;  // 自增2,不会改变原本的数据类型
System.out.println(s1);  // 12

int i1 = 1
i1 = i1 + 1;  // 不推荐
i1 += i1;  //推荐
i1++;  //最推荐

int i1 = 2;
i1 *= 0.1; //不改变类型, 所以值为int型:0
System.out.println(i1);  // 0
i1++;
System.out.println(i1);  // 1

int n1 = 10;
n1 += (n1++) + (++n1); // n1 = n1 + (n1++) + (++n1) 
System.out.println(n1);  // 10+10+12=32

3、比较运算符

4、逻辑运算符

异或:不一样就是 true

& 与 && 运算结果相同,当左边为 false 时,& 继续执行右边的运算,&& 则不再继续运算。(其实就是 && 更聪明一些,不做无用功, 开发推荐 &&)

| 与 || 运算结果相同,当左边为 true 时,| 继续执行右边的运算,|| 则不再继续运算。

boolean x = true;
boolean y = false;
short z = 42;
if ((z++ == 42) && (y = true)) z++;
if ((x = false) || (++z == 45)) z++;  // x=false 表示给x赋值false,所以判断为false
System.out.println(z);  // 46

5、位运算符

位运算符是直接对整数的二进制进行的运算。

对于 & 、|、^,当运算的是数值,则是位运算符;当运算的是boolean类型,则是逻辑运算符。

// 两数交换数值
// method1:需要定义临时变量
int temp = num1;
num1 = num2;
num2 = temp;

// method2:好处就是不需要定义临时变量;坏处是:相加可能超出存储范围,只能用于数值型。
num1 = num1 + num2;
num2 = num1 - num2;
num1 = num1 - num2;

// method3:好处是不会超出存储范围,局限性是:只能用于数值型
num1 = num1 ^ num2; 
num2 = num1 ^ num2; // (num1 ^ num2) ^ num2 -> num1, num1 赋值给 num2
num1 = num1 ^ num2; // (num1 ^ num2) ^ 原来num1的值 -> num2, num2 赋值给 num1

6、三元运算符

凡是 三元运算符 和 switch-case 的结构都可以改写为 if-else,反之不成立。三元运算符 和 switch-case 执行效率稍高于 if-else,所以如果取值较少时可选用 switch 或者 三元运算符。

int max = (m > n): m ? n; // 注意:两个可能结果需要一个统一的类型去接收

 7、运算符的优先级

不建议死记硬背,在实际的应用中去体会,自然而然就会用了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/141402.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

频域分析实践介绍

频域分析实践介绍 此示例说明如何执行和解释基本频域信号分析。该示例讨论使用信号的频域表示相对于时域表示的优势,并使用仿真数据和真实数据说明基本概念。该示例回答一些基本问题,例如:FFT 的幅值和相位的含义是什么?我的信号是…

谈谈Vue双向数据绑定的原理

目录 一、什么是Vue.js 二、什么是双向数据绑定 三、双向数据绑定的原理 一、什么是Vue.js Vue.js是一款流行的JavaScript前端框架,用于构建用户界面。它是一个轻量级、灵活而高效的框架,被广泛应用于单页应用程序和可交互的前端界面开发。Vue.js的设…

Jmeter+ant+Jenkins持续集成

📢专注于分享软件测试干货内容,欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢交流讨论:欢迎加入我们一起学习!📢资源分享:耗时200小时精选的「软件测试」资…

同济 MBA 携手和鲸课程共建,以数智人才培养持续赋能企业数字化转型

数智化的浪潮席卷全球,我国产业界应如何做出应变?各企业又该如何深化数字化转型?在任重道远的持续探索中,数智人才培养作为企业实现成功转型的关键要素,已然成为大势所趋。 同济大学综合 MBA 项目高度重视工商管理人才…

2023年【建筑电工(建筑特殊工种)】找解析及建筑电工(建筑特殊工种)复审考试

题库来源:安全生产模拟考试一点通公众号小程序 建筑电工(建筑特殊工种)找解析是安全生产模拟考试一点通生成的,建筑电工(建筑特殊工种)证模拟考试题库是根据建筑电工(建筑特殊工种)最新版教材汇编出建筑电工(建筑特殊工种)仿真模拟考试。2023年【建筑电…

CTFhub-RCE-文件包含

访问网站 我们仔细看一下php代码,重点是 if (!strpos($_GET["file"], "flag")) { include $_GET["file"]; 这里有一个strpos(string,find,start)函数 意思在string字符串中找find的位置,start是查找的开始位置 那么这句代…

设计原则 | 单一职能原则

一、单一职能原则(SRP:Single Responsibility Principle) 1、原理 就一个类而言,应该仅有一个引起它变化的原因。如果一个类承担的职责过多,就等于把这些职责耦合在一起。一个职责的变化可能会削弱或者抑制这个类完成…

Autosar模块介绍:Memory_6(FLS-闪存驱动)

上一篇 | 返回主目录 | 下一篇 Autosar模块介绍:Memory_6(FLS-闪存驱动 1 基本术语解释2 Fls组成结构图3 Fls基本操作3.1 通用规则说明3.2 加载、执行和删除flash访问代码 4 Fls常用操作时序4.1 初始化4.2 同步操作函数4.3 异步操作函数4.4 取消正在执行的操作 1 …

Jmeter 性能 —— 负载阶梯场景!

1、安装阶梯测试的第三方插件->搜jpgc 选项-JMeter Plugins Manager -搜jpgc 空格,然后安装 2、脚本-线程组选jpgc Stepping Thread Group 最终并发数为100,并发数从0开始,5秒内增加10个并发数,增加10个后持续30s,…

第二章:main 方法

系列文章目录 文章目录 系列文章目录前言一、main 方法总结 前言 main方法详解。 一、main 方法 //main方法的形式 public static void main(String[] args){}解释main方法main方法被虚拟机调用Java虚拟机需要调用类的main()方法,所以该方法的访问权限必须是publi…

HRNet关键点检测

HRNet是一种用于关键点检测的网络架构,它具有一些优点和缺点。 优点: 可以保持高分辨率:HRNet将高分辨率到低分辨率的子网并联连接,而不是像大多数现有解决方案那样串联连接。因此,HRNet能够保持高分辨率&#xff0c…

EEG重参考原理及python代码实现

这里主要想记录和分享的是:如果采集EEG时,使用的是部分导联,并且采集的时候使用右侧乳突作为参考电极,那么在预处理阶段,我们该如何对EEG信号进行重参考呢?使用不同重参考方法,结果是否一致&…

Vue3 + Three.js + gltf-pipeline大型园区场景渲染与3D业务

在非使用unity作为3D渲染方案的前提下,对与目前web开发者比较友好的除了canvas场景需要的2D babylon.js,fabric.js, Three.js是目前针对于jsWeb用户最直接且比较友好的3D引擎方案了。 准备工作: 1.明确需要用的场景方案都有那些,模…

mindspore mindyolo目标检测华为昇腾上推理使用

参考: https://github.com/mindspore-lab/mindyolo 使用案例: https://github.com/mindspore-lab/mindyolo/blob/master/GETTING_STARTED.md 安装: pip install mindyolo特别注意opencv-python、opencv-python-headless版本问题&#xff0…

Redis安装、配置

系列文章目录 第一章 Java线程池技术应用 第二章 CountDownLatch和Semaphone的应用 第三章 Spring Cloud 简介 第四章 Spring Cloud Netflix 之 Eureka 第五章 Spring Cloud Netflix 之 Ribbon 第六章 Spring Cloud 之 OpenFeign 第七章 Spring Cloud 之 GateWay 第八章 Sprin…

算法的复杂性

通常情况下,一个问题可能对应有多种解决方案,每种解决方案都是一种算法。因此,我们可能经常需要做一件事:从众多算法中挑选出一个最好的算法。所谓“最好”的算法,即最适合当前场景使用的算法。 不同的应用场景&#x…

springboot整合SSE技术开发经验总结及心得

springboot整合SSE技术开发经验总结及心得 一、开发背景二、快速了解SSE1、概念2、特性 三、开发思路四、代码演示1、引入依赖2、服务端代码3、后端定时任务代码 4、解决乱码的实体类4、前端代码 五、核心代码分析 一、开发背景 公司需要开发一个大屏界面,大屏页面…

使用内网穿透实现U8用友ERP本地部署与异地访问

文章目录 前言1. 服务器本机安装U8并调试设置2. 用友U8借助cpolar实现企业远程办公2.1 在被控端电脑上,点击开始菜单栏,打开设置——系统2.2 找到远程桌面2.3 启用远程桌面 3. 安装cpolar内网穿透3.1 注册cpolar账号3.2 下载cpolar客户端 4. 获取远程桌面…

【C++笔记】AVL树的模拟实现

【C笔记】AVL树的模拟实现 一、AVL树的概念二、AVL树的模拟实现2.1、定义节点2.2、插入2.3、旋转2.3.1、左单旋2.3.2、右单旋2.3.3、左右双旋2.3.4、右左双旋2.3.5、插入接口的整体代码实现 三、验证AVL树3.1、验证 一、AVL树的概念 二叉搜索树虽然在一般情况下可以提高查找的…

生成式AI以及当前趋势

ChatGPT 激发了人们的想象力和好奇心。自 2022 年 11 月推出后,短短两个月内其月活用户便达到 1 亿,成为有史以来增长速度最快的消费类应用和第一个杀手级的生成式 AI 应用。随着创新节奏的加快,想要紧跟生成式 AI 的发展速度,难度…