Java运算符详解

news2024/11/27 10:45:05

目录

        🔑前言

        🎽算式运算符

        ⚙赋值运算符

        🍊关系运算符

        🍺逻辑运算符

        🍒位运算符

        🌹移位运算符

        🍃条件运算符

        🍉运算符优先级


🔑前言

任何一个程序都离不开计算问题,运算符代表着表达式之间进行何种运算,所以我们要熟练掌握各种运算符的使用方法。

了解单目操作运算符、双目运算符、三目运算符

单目运算符:即运算符只对一个表示式执行操作,如a++...。

双目运算符:即运算符对两个表示式进行操作 a+=b。

三目运算符:即运算符对三个表示式进行操作true ? 6 : 8。

🎽算式运算符

+、-、*、 /、 %

算式运算符也就是我们平常经常用到的,也比较简单,使用/和%有些是我们要小心的。

使用/号的注意事项

1.分母不能为0,否则会抛出异常,分子和分母都为整形时,得到的结果为也为整数。

2.当分子和分母都为整形数据时,得到的结果为也为整数。

 %(取模运算符)号的使用

总结:对于x%y,计算结果的正负与x有关。 

⚙赋值运算符

=、+=、-=、*=、/=、%=、^=、&=、|=、>>=、<<=,>>>=,++,--。

int a = 5;
a += 5;//相当于a = a+5
a *= 5;//相当于a = a*5
a /= 10/2;相当于a = a/(10/2)
a %= 2+3;相当于a = a%(2+3)
a++;//相当于a = a+1;
a--;//相对于a = a-1;
...

值得注意的一点就是。 

error:a是一个short类型的变量,小于四字节类型整形变量之间进行运算时,会先提升到int类型再参有运算。

right:赋值运算符运算时,会将计算的结果自动帮我们进行类型转换。

注意:前置++和后置++的区别,a++、++a。如果单独使用则没区别,都是使a自增。前置++a先使a自增,再使用a;后置++,先使用a,a再自增。

🍊关系运算符

>、>=、<、<=、==、!=

int a = 10;
int b = 5;
System.out.println(a>b);//true
System.out.println(a<b);//false
System.out.println(a>=b);//true
System.out.println(a<=b);//false
System.out.println(a==b);//false
System.out.println(a!=b);//true

注意:关系运算符计算的最终结果是只有两个,true或false,通常称结果为true或false的表示式为布尔表示式。

🍺逻辑运算符

&&、||、、!

&&(双与运算符):&&左右两边一定要是一个布尔表达式。

布尔表达式1 && 布尔表达式2

System.out.println(true && false);//false
System.out.println(false && true);//false
System.out.println(false && false);//false
System.out.println(true && true);//true

结论:布尔表示式1或布尔表示式2为假,则整体结果为假,布尔表达式1和布尔表示式2为真,则整体结果为真。

注意:&&运算时,若布尔表达式1为假,则不执行布尔表示式2,因此也称&&为短路与。

||(双或运算符):||左右两边一定要是一个布尔表达式。

布尔表达式1 || 布尔表达式2

System.out.println(true || false);//true
System.out.println(false || true);//true
System.out.println(false || false);//false
System.out.println(true || true);//true

结论 :布尔表示式1或布尔表示式2为真,则整体结果为真,布尔表达式1和布尔表示式2为假,则整体结果为假。

注意:若布尔表示式1为真则不执行表示式2,因此也称||为短路或。

 !(非运算符):!运算符是一个单目操作符,!的右边一定是一个布尔表示式

!布尔表示式
System.out.println(!true);//false
System.out.println(!false);//true

结论:如果布尔表示式为真,结果为真,如果布尔表示式为假,结果为真。 

🍒位运算符

&、|、~,^

位运算符就是对数据的补码进行操作,&、|、^是双目运算符,表示式两边一定是个整数;~单目操作符,也表达式需要是整数。

&(按位与运算符):

int a = 6;
int b = -5;
int c = b&a;
a补码:
00000000 00000000 00000000 00000110
b补码
11111111 11111111 11111111 11111011
a&b
00000000 00000000 00000000 00000110
11111111 11111111 11111111 11111011  &
--------------------------------------
00000000 00000000 00000000 00000010
//按位与,一个为0则为0,两个为1则为1
//c=2

|(按位或运算符):

int a = 7;
int b = 12;
int c = b|a;
a补码:
00000000 00000000 00000000 00000111
b补码
00000000 00000000 00000000 00001100
a&b
00000000 00000000 00000000 00000111
00000000 00000000 00000000 00001100  &
--------------------------------------
00000000 00000000 00000000 00001111
//按位或,一个为1则为1,两个为0则为0
//c=15

~(按位取反运算符):

int a = 5;
int b = ~a;//-6
a补码:
00000000 00000000 00000000 00000101
~a得到的结果也为补码
11111111 11111111 11111111 11111010
~a反码
11111111 11111111 11111111 11111001
~a原码
10000000 00000000 00000000 00000110

^(按位异或运算符:

int a = 70;
int b = 12;
int c = b^a;
a补码:
00000000 00000000 00000000 01000110
b补码
00000000 00000000 00000000 00001100
a&b
00000000 00000000 00000000 01000110
00000000 00000000 00000000 00001100  &
--------------------------------------
00000000 00000000 00000000 01001010
//按位异或,找不同,不同为1,相同为0
//c=74

🌹移位运算符

>>、<<、>>>

移位运算符针对的也是数据的补码进行操作。

>>(右移运算符):

表达式>>右移多少位
int a = 5;
int c = a>>2;
a的补码:
00000000 00000000 00000000 00000101
  00000000 00000000 00000000 000001
a>>1
00000000 00000000 00000000 00000001
前面缺少位补符号位
c = 1

<<(左移运算符):

表达式<<左移多少位
int a = 5;
int c = a<<2;
a的补码:
   00000000 00000000 00000000 00000101
   000000 00000000 00000000 00000101
a<<1
   00000000 00000000 00000000 00010100
后面缺上的位补0
c = 20

>>>(无符号右移运算符):

表达式>>右移多少位
int a = -5;
int c = a>>>2;
a的补码:
11111111 11111111 11111111 11111011
  11111111 11111111 11111111 111110
a>>1
00111111 11111111 11111111 11111110
前面缺少的位只补0
c = 1073741822

🍃条件运算符

? :

布尔表示式?表示式1:表达式2
System.out.println(true?5:8);//5
System.out.println(false?5:8);//8

结论 :布尔表达式为真,执行表达式1,布尔表达式为假,结果为表达式2,并于表达式的结果作为整个运算的结果。

🍉运算符优先级

优先级运算符结合性
1() [] .从左向右
2! +(正) -(负) ~ ++ --从右向左
3*  / %从左向右
4+(加) -(减)从左向右
5<< >> >>>从左向右
6< <= > <= 从左向右
7== !=从左向右
8&从左向右
9^从左向右
10|从左向右
11&&从左向右
12||从左向右
13?:从右向左
14

= += -= *=  /= %= &= |= 

~= <<= >>= >>>=

从右向左

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IOC/DI配置管理第三方bean(Druid/C3P0)

文章目录 1 案例:数据源对象管理1.1 环境准备1.2 思路分析1.3 实现Druid管理步骤1:导入druid的依赖步骤2:配置第三方bean步骤3:从IOC容器中获取对应的bean对象步骤4:运行程序 1.4 实现C3P0管理步骤1:导入C3P0的依赖步骤2:配置第三方bean步骤3:运行程序 2 加载properties文件2.1…

详解MySQL的并发控制

目录 1.概述 2.事务 2.1.什么是事务 2.2.事务的隔离级别 2.2.1.三种数据一致性问题 2.2.2.四种隔离级别 2.3.如何设置隔离级别 3.锁 3.1.锁与事务的关系 3.2.分类 3.3.表锁 3.3.1.概述 3.3.2.读锁 3.3.3.写锁 3.3.4.保护机制 3.4.行锁 3.4.1.概述 3.4.2.什么…

Redis Java API操作

1、普通maven工程方式 Redis不仅可以通过命令行进行操作&#xff0c;也可以通过JavaAPI操作&#xff0c;通过使用Java API来对Redis数据库中的各种数据类型操作 导入POM依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http…

【Linux Network】传输层协议——UDP

目录 传输层 端口号 端口号范围划分 认识知名端口号(Well-Know Port Number) netstat pidof UDP协议 UDP协议端格式 UDP的特点 面向数据报 UDP的缓冲区 UDP使用注意事项 基于UDP的应用层协议 UDP详解&#x1f337; 传输层 在TCP/IP协议中可以把网络简单的划分为四个部分&#…

大数据如何助力营销(3)产品定位

在市场竞争日益激烈的环境下&#xff0c;产品定位是企业成功的关键因素之一。产品定位是指根据目标市场和目标消费者的需求、偏好和期望&#xff0c;确定产品的特性、功能、形象和价值&#xff0c;并与竞争对手的产品进行差异化的过程。产品定位不仅影响产品的设计、开发、生产…

全面讲解涂鸦PaaS2.0开发平台!物联网干货预警

之前我们有介绍过涂鸦 IoT PaaS&#xff08;点击查看往期介绍&#xff09;&#xff0c;面向开发生态&#xff0c;它集成了云开发、App 开发、硬件开发三大核心支撑能力&#xff0c;能够全方位助力开发者打造极具竞争力的个性化 IoT 解决方案&#xff0c;极大地降低 IoT 开发门槛…

Appium APP自动化环境搭建

1.下载安装 F:\android-sdk-windows F:\Appium-windows-1.21.0 F:\nodejs 2.创建一个bat文件&#xff0c;命名为appium.bat&#xff0c;并在其中写入如下内容&#xff1a; node Appium安装目录\resources\app\node_modules\appium\build\lib\main.js %* 注意&#xff1a;请…

从0到1开始,一步步搭建Web自动化测试框架

测试框架的设计有两种思路&#xff0c;一种是自底向上&#xff0c;从脚本逐步演变完善成框架&#xff0c;这种适合新手了解框架的演变过程。另一种则是自顶向下&#xff0c;直接设计框架结构和选取各种问题的解决方案&#xff0c;这种适合有较多框架事件经验的人。本章和下一张…

【zabbix】批量监控端口,自动发现规则

快速搞定端口批量监控 一、脚本及配置 1、&#xff08;文件名&#xff1a;check_port.py&#xff09;&#xff08;python2.7版本&#xff09; 存在路径&#xff1a;/etc/zabbix/zabbix_agentd.d/check_port.py 这个脚本有一部分内容是我从百度上找的&#xff0c;有一部分自己…

【C++】红黑树的实现

文章目录 &#x1f4d5; 概念特性 &#x1f4d5; 红黑树具体实现节点定义结构框架插入 &#x1f4d5; 概念 红黑树&#xff0c;是一种二叉搜索树&#xff0c;但在每个结点上增加一个存储位表示结点的颜色&#xff0c;可以是Red或Black。 通过对任何一条从根到叶子的路径上各个…

Python基础(四)

目录 一、程序的组织结构 1、前言 二、顺序结构 1、介绍 三、对象的布尔值 1、介绍 2、规定 四、分支结构 1、单分支if结构 1、语法语义 2、语法结构 3、案例 2、双分支if...else结构 1、语法语义 2、语法结构 3、案例 3、多分支if...elif...else结构 1、语…

Java语言---栈与队列

目录 一.栈 1.1栈的概念 1.2.栈的实现 1.2.1数组实现 栈 栈的创建 栈的基本方法实现 1.2.2链表实现 栈 栈的创建 栈的基本方法实现 二.队列 2.1队列的概念 2.2队列的实现 2.3代码实现 2.3.1队列代码的构建 2.3.2 队列 基础方法实现 总结 &#x1f63d;个人主页…

深入理解2D卷积和3D卷积

文章目录 卷积核的维度2D卷积单通道多通道代码example2d卷积操作后变化 3D卷积单通道多通道代码 在项目中用到了conv3但是对其背后的原理还有一些模糊的地方&#xff0c;conv2d与多通道的conv2d的区别在哪里&#xff1f;conv3d的思想理论是什么&#xff1f;对此进行探究和记录……

「AI之劫」:当机器超越人类底线,正在侵犯我们的创造力和道德

随着AI技术的不断发展&#xff0c;AI生成内容&#xff08;AIGC&#xff09;已经成为数字娱乐、商业营销和学术研究等领域的热门话题。随着人工智能技术的不断发展越来越多的领域开始应用AI技术&#xff0c;其中之一就是内容生成领域。 AIGC全称为AI-Generated Content, 指基于生…

2023年5月广州/深圳制造业产品经理很适合考的证书-NPDP

产品经理国际资格认证NPDP是新产品开发方面的认证&#xff0c;集理论、方法与实践为一体的全方位的知识体系&#xff0c;为公司组织层级进行规划、决策、执行提供良好的方法体系支撑。 【认证机构】 产品开发与管理协会&#xff08;PDMA&#xff09;成立于1979年&#xff0c;是…

【利用AI让知识体系化】入门Egg框架(含实战)

思维导图 文章目录 思维导图第一章&#xff1a;概述1.1 Egg.js 简介1.2 Egg.js 的架构和优势1.3 Egg.js 的基本组件和插件 第二章&#xff1a;环境搭建2.1 Node.js 环境安装和配置2.2 Egg.js 应用创建和项目结构介绍2.3 Egg.js 应用部署和启动 第三章&#xff1a;基本开发3.1 路…

经纬恒润新产品系列 | 这款AR-HUD将颠覆你的认知

随着科技的发展与突破&#xff0c;智能化产品在汽车领域扮演了越来越重要的角色。本文即将介绍**经纬恒润新产品——AR-HUD&#xff08;增强现实抬头显示系统&#xff09;&#xff0c;**它可以将科幻电影中的驾驶场景变为现实——将信息投影在挡风玻璃上&#xff0c;基于此功能…

开发环境搭建和创建STM32工程

目录 一、开发环境搭建 1. STM32CubeMX 2.Keil安装 二、创建STM32工程 一、开发环境搭建 1. STM32CubeMX ST公司出品 工具链接 https://www.st.com/zh/development-tools/stm32cubemx.html STM32CubeMX是一种图形工具&#xff0c;通过分步过程可以非常轻松地配置STM32微控制器和…

coolshell 镜像备份站点

缅怀技术大佬做的一个镜像站点 - RIP 消息刚开始是在推特传开&#xff0c;后面得到了家人同事的证实。噩耗&#xff01; worldpeople2019 太意外了&#xff01;中年程序员&#xff0c;感觉年龄跟我差不多&#xff0c;怎么就这么突然去世了&#xff1f;&#xff01;诸位码农朋友…

Python爬虫进阶(1),Django+Selenium+Mysql+SimpleUI,从零开始搭建自己的爬虫后台管理系统

如果爬虫做完的话都会发现每个文件要么保存到csv或者是其他格式的文件中&#xff0c;这样做多少会有些麻烦&#xff0c;所以需要将这些内容保存起来方便自己管理和查看内容。 相对于flask而言Django有着相对成熟的一个后台管理系统配合上其他一些插件就可以做到即插即用的效果…