【Java|基础篇】超详细讲解运算符

news2024/11/18 11:39:41

文章目录

  • 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专栏在不断更新中,欢迎订阅!
“愿与君共勉,携手共进!”
在这里插入图片描述

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

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

相关文章

OpenCV-PyQT项目实战(11)项目案例07:摄像头操作与拍摄视频

欢迎关注『OpenCV-PyQT项目实战 Youcans』系列&#xff0c;持续更新中 OpenCV-PyQT项目实战&#xff08;1&#xff09;安装与环境配置 OpenCV-PyQT项目实战&#xff08;2&#xff09;QtDesigner 和 PyUIC 快速入门 OpenCV-PyQT项目实战&#xff08;3&#xff09;信号与槽机制 …

【大数据实时数据同步】超级详细的生产环境OGG(GoldenGate)12.2实时异构同步Oracle数据部署方案(中)

系列文章目录 【大数据实时数据同步】超级详细的生产环境OGG(GoldenGate)12.2实时异构同步Oracle数据部署方案(上) 【大数据实时数据同步】超级详细的生产环境OGG(GoldenGate)12.2实时异构同步Oracle数据部署方案(中) 文章目录系列文章目录前言安装OGG12C软件一、Linux本地GUI…

配置本地 python GEE、geemap环境

1.安装anconda 百度搜索anconda清华镜像&#xff0c;从清华镜像中选择最新的anconda安装包&#xff0c;国内镜像网站下载速度较快&#xff0c;如果从国外官网下载速度相当慢&#xff0c;详细安装教程请参考&#xff1a; anconda安装教程https://blog.csdn.net/lwbCUMT/article…

这些Python计算机视觉工具,帮你coding事半功倍

作为开发人员喜爱的语言之一&#xff0c;Python以其丰富的社区可用工具和库而闻名。我们列出了开发人员可以用于计算机视觉10个流行流行的Python库或平台&#xff0c;以帮助开发人员自动化开发任务&#xff0c;其中包括检测和可视化。1 | fastaifastai是一个深度学习库&#xf…

HBase读取流程详解

读流程从头到尾可以分为如下4个步骤&#xff1a;Client-Server读取交互逻辑&#xff0c;Server端Scan框架体系&#xff0c;过滤淘汰不符合查询条件的HFile&#xff0c;从HFile中读取待查找Key。其中Client-Server交互逻辑主要介绍HBase客户端在整个scan请求的过程中是如何与服务…

重构·改善既有代码的设计.01

前言近期在看Martin Fowler著作的《重构.改善既有代码的设计》这本书&#xff0c;这是一本经典著作。书本封面誉为软件开发的不朽经典。书中从一个简单的案例揭示了重构的过程以及最佳实践。同时给出了重构原则&#xff0c;何时重构&#xff0c;以及重构的手法。用来改善既有代…

Vue2.0开发之——购物车案例-Goods组件封装-商品名称和图片(46)

一 概述 循环渲染Goods组件为Goods组件封装title属性为Goods组件封装pic属性 二 循环渲染Goods组件 2.1 App.vue中导入Goods组件 import Goods from /components/Goods/Goods.vue2.2 App.vue中注册Goods组件 components: {Header,Goods}2.3 循环渲染每一个商品的信息 <…

记录--在Vue3这样子写页面更快更高效

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 前言 在开发管理后台过程中&#xff0c;一定会遇到不少了增删改查页面&#xff0c;而这些页面的逻辑大多都是相同的&#xff0c;如获取列表数据&#xff0c;分页&#xff0c;筛选功能这些基本功能。而…

windows下neo4j安装及配置,并绘制人物关系图谱

neo4j安装及配置&#xff0c;绘制人物关系图谱 先升级pip&#xff0c;安装py2neo pip install py2neo2021.0.1依赖 jdk1.8&#xff0c; neo4j 3.xx&#xff1b; 或者jdk18&#xff0c;neo4j 4.x&#xff0c;5.x&#xff1b; 官网下载了neo4j4.x,5.x 因为jdk版本原因都不行&am…

段错误排查方法与防御性措施~

什么是段错误 首先我们需要知道什么是段错误&#xff0c;才能对症下药。 段错误是一种在程序运行时发生的错误&#xff0c;通常是由于程序试图访问不在其地址空间范围内的内存引起的。 例如&#xff0c;当一个程序访问空指针或者已经被释放的内存时&#xff0c;就有可能触发…

Mybatis框架的搭建与使用

Mybatis框架的搭建 一.创建新模块 二、在pom.xml导入依赖 <dependencies><!-- Mybatis核心 --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.7</version></dependenc…

软件研发管理经验总结 - 技术管理

软件研发管理经验总结 - 技术管理 技术管理主要负责有技术团队建设、管理团队成员技术相关事务、帮助团队成员成长、负责团队成员交付的代码质量、以及负责产品技术方向、以及产品相关前沿技术调研&#xff1b;管理团队成员技术相关事务有代码Review、故障率跟踪、分析及根据分…

算法系列之数值积分的目的

PLC算法里的数字积分器详细介绍请参看下面的文章链接: PLC算法系列之数值积分器(Integrator)_RXXW_Dor的博客-CSDN博客数值积分和微分在工程上的重要意义不用多说,闭环控制的PID控制器就是积分和微分信号的应用。流量累加也会用到。有关积分运算在流量累加上的应用,请参看下…

LeetCode 349. 两个数组的交集和 692. 前K个高频单词

两个数组的交集 难度 简单 题目链接 这道题的难度不大&#xff0c;我们可以把数组里的数据存到set里面。这样就完成了排序和去重&#xff0c;然后我们再把一个set里面的数据和另外一个set数据进行比较。如果相同就插入到数组里。 代码如下&#xff1a; 但是这个算法的时间复…

自学大数据第四天~hadoop集群的搭建

Hadoop集群安装配置 当hadoop采用分布式模式部署和运行时,存储采用分布式文件系统HDFS,此时HDFS名称节点和数据节点位于不同的机器上; 数据就可以分布到多个节点,不同的数据节点上的数据计算可以并行执行了,这时候MR才能发挥其本该有的作用; 没那么多机器怎么办~~~~多几个虚拟…

网络安全之资产及攻击面管理

“摸清家底&#xff0c;认清风险”做好资产管理是安全运营的第一步。那么什么是资产&#xff0c;资产管理的难点痛点是什么&#xff0c;如何做好资产管理&#xff0c;认清风险。带着这些问题我们来认识一下资产及攻击面管理。 一、资产的定义 《GBT 20984-2007信息安全技术信…

论文阅读_善用Midjourney

论文信息 name_en: Grimm in Wonderland: Prompt Engineering with Midjourney to Illustrate Fairytales name_ch: 用Midjourney生成格林童话插图 paper_addr: http://arxiv.org/abs/2302.08961 date_publish: 2023-02-17 author: Martin Ruskov,米兰大学 读后感 针对生成图…

力扣-计算特殊奖金

大家好&#xff0c;我是空空star&#xff0c;本篇带大家了解一道简单的力扣sql练习题。 文章目录前言一、题目&#xff1a;1873. 计算特殊奖金二、解题1.正确示范①提交SQL运行结果2.正确示范②提交SQL运行结果3.正确示范③提交SQL运行结果4.正确示范④提交SQL运行结果5.其他总…

【C++】stl_list介绍和实现,list和vector区别,list vector string 迭代器失效

本篇博客详细介绍list的实现&细节讲解&#xff0c;并且在文章末对list和vector&#xff0c;string进行区分和复习 list的基本结构就是双向带头循环链表&#xff0c;链表和顺序表的差别我们在前面数据结构的时候早就学过了&#xff0c;不再赘述 在使用stl库里面list时&…

3.1 第一个外设GPIO GPIO输出

GPIO简介•GPIO是通用输入输出口&#xff08;俗称IO口&#xff09;•可配置为8种输入输出模式•引脚电平&#xff1a;0V~3.3V&#xff08;数据0是0V&#xff0c;数据1是3.3V&#xff09;&#xff0c;部分引脚可容忍5V.•输出模式可控制端口输出高低电平&#xff0c;用以驱动LED…