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

【一步一步了解Java系列】:了解Java与C语言的运算符的“大同小异”

看到这句话的时候证明:此刻你我都在努力~

                                 加油陌生人~

个人主页:  Gu Gu Study                                                   ​​

专栏:一步一步了解Java

喜欢的一句话: 常常会回顾努力的自己,所以要为自己的努力留下足迹。

      如果喜欢能否点个赞支持一下,谢谢啦!

                                                                                                                            作者:小闭

目录

一、算术运算符

二、赋值运算符(增量,自增运算符)

三、关系运算符

四、逻辑运算符

五、位运算符

六、移位操作符


运算符的作用

在 Java 中,运算符具有以下主要作用:

计算机语言最基本的作用就是进行数学运算
 
1. 执行运算:如算术运算符(+、-、*、/等)用于进行数学计算。
2. 比较操作:比较运算符(如>、<、>=、<=等)用于比较两个值的大小关系。
3. 逻辑判断:逻辑运算符(&&、||、!等)用于组合和判断条件。
4. 赋值操作:赋值运算符(=)用于将值赋给变量。
5. 其他操作:还有一些特殊的运算符,如位运算符等,用于位操作等。

 


Java中各种运算符功能

Java 中的运算符可以分为以下几类:
 
1. 算术运算符:用于执行基本的数学运算,如加法、减法、乘法、除法和取模(取余)等。例如,+ 表示加法运算,- 表示减法运算。


2. 关系运算符:用于比较两个值的关系,如等于、不等于、大于、小于等。关系运算符返回布尔值(true 或 false),用于条件判断。例如,== 表示等于运算,< 表示小于运算。


3. 逻辑运算符:用于执行逻辑运算,如逻辑与、逻辑或和逻辑非等。逻辑运算符通常用于布尔值的操作,它们返回布尔结果。例如,&& 表示逻辑与,|| 表示逻辑或,! 表示逻辑非。


4. 赋值运算符:用于将值赋给变量,如 = 表示赋值运算,+= 表示加并赋值。


5. 自增和自减运算符:用于增加或减少变量的值,例如 ++ 表示自增,-- 表示自减。


6. 位运算符:用于对二进制位进行操作,如位与、位或、位异或、取反等。


7. 三目运算符:用于根据条件选择一个值。
 

一、算术运算符

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

int a = 20;
int b = 5;
System.out.println(a + b);   // 25System.out.println(a - b);    // 15System.out.println(a * b); // 100System.out.println(a / b); // 4System.out.println(a % b); // 0     模运算其实就是数学中除法的余数

注意: 

1.1 上面的都是算术运算符二元运算符,使用时必须要有左右两个操作数

1.2 关于类型转变:int / int 结果还是int类型,而且会向下取整 

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

 

1.3 取模时%右边的操作数不能为0否则就会报错

public static void main(String[] args) {int a=3/0;System.out.println("a = " + a);  //a = 1}

1.4 与C语言不同的是,Java中支持double类型数据进行取模运算 

public static void main(String[] args) {double a=66.6/1.1;System.out.println("a = " + a);                  }

1.5 类型的数据进行运算时类型会转变为类型较大的数据。        

public static void main(String[] args) {System.out.println(66.6/6);  //11.1}

二、赋值运算符(增量,自增运算符)

如下:

+= ,-= ,*=, %=,++,--

2.1 增量运算符

int a = 18;
a += 2; // 相当于 a = a + 2
System.out.println(a); // 输出20a -= 2; // 相当于 a = a - 2
System.out.println(a); // 输出16a *= 2; // 相当于 a = a * 2
System.out.println(a); // 输出36a /= 2; // 相当于 a = a / 2
ystem.out.println(a); // 输出9

 如上注释,增量运算符可以有效提高我们敲打吗的速度。

2.2 自增运算符

++为变量的值加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,与++含义类似

 


三、关系运算符

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

关系运算符与数学的比较一模一样。

3.1 与C语言不同的是,他们的结果并不是1和0,Java中不能用0和1表示事件的真假。其返回的只有true 或者 false 。

四、逻辑运算符

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

4.1 && 运算符  “一个为假则结果为假”

表达式1                                    表达式2                                       结果

真                                                 真                                                真

真                                                 假                                                假

假                                                 真                                                假

假                                                 假                                                假

 


4.2  || 操作符 “一个为真则结果为真”

表达式1                                    表达式2                                       结果

真                                                 真                                                真

真                                                 假                                                真

假                                                 真                                                真

假                                                 假                                                假


4.3   ! 逻辑非

即把真(true)变为假(false),把假(false变为真(true)。

4.4 短路求值

对于 && , 如果左侧表达式值为 false, 则表达式结果一定是 false, 无需计算右侧表达式.

对于 ||, 如果左侧表达式值为 true, 则表达式结果一定是 true, 无需计算右侧表达式.

& 和 | 如果表达式结果为 boolean 时, 也表示逻辑运算. 但与 && || 相比, 它们不支持短路求值

如下代码:

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

 在这里后面的操作 10/0,并未被计算也就是程序没有出现分母为0的异常警告/


五、位运算符

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

 位运算符主要有四个: & | ~ ^ ,除 ~ 是一元运算符外,其余都是二元运算符。 位操作表示 按二进制位运算. 计算机中都是使用二进制来表示数据的(01构成的序列), 按位运算就是在按照二进制位 的每一位依次进行计算.


5.1 按位与 &

在计算机中数据的储存都是以0,1的形式进行储存,而按位与 &就可以让两个数据进行运算

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

public static void main(String[] args) {int a=10;int b=3;System.out.println(a&b);  //打印结果为2}

 为什么打印2呢?,首先我们列出两个数的补码。

int a =00000000000000000000000000001010

int b =00000000000000000000000000000011

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

 经过按位与&后得到 :00000000000000000000000000000010


5.2 按位或

在计算机中数据的储存都是以0,1的形式进行储存,而按位或 | 就可以让两个数据进行运算.

进行按位或 | 运算时 :如果两个二进制位都是 0, 则结果为 0, 否则结果为 1.

public static void main(String[] args) {int a=10;int b=3;System.out.println(a|b);  //11}

 

为什么打印11呢?,首先我们列出两个数的补码。

int a =00000000000000000000000000001010

int b =00000000000000000000000000000011

进行按位或 | 运算时 :如果两个二进制位都是 0, 则结果为 0, 否则结果为 1.

经过按位或| 得到: 00000000000000000000000000001011 即十进制的11


六、移位操作符

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

如:

int a = 10;
System.out.println( a << 1);
// 运行结果20

 6.1  <<左移操作符

左移规则:最左侧位不要了, 最右侧补 0.

int a = 10;
System.out.println( a << 1);
// 运行结果20

就像上面的代码,我们先把int a的补码列出来

int a =00000000000000000000000000001010   左移规则:最左侧位不要了, 最右侧补 0.

经过左移1位后得到:00000000000000000000000000010100  即十进制的20


6.2  >>右移操作符

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

int a = 10;
System.out.println( a >> 1);
// 运行结果5

 老样子列出int a的补码:

int a =00000000000000000000000000001010  

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

然后右移一位得到:00000000000000000000000000000101 即十进制的5.


6.3 无符号右移

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

 与普通右移不同的就是无符号右移后得到的肯定是一个正数。即使是负数右移

 public static void main(String[] args) {int a = -10;System.out.println( a >>> 1);
// 运行结果20}

 列出-10的补码:

原码:int a =10000000000000000000000000001010  

反码:          11111111111111111111111111111110101

补码:          11111111111111111111111111111110110

无符号右移规则:最右侧位不要了, 最左侧补0

然后右移一位得到:01111111111111111111111111111111011  

转化为原码打印即:上面的结果。


 七、三目运算符

形式为:表达式1 表达式2 : 表达式3

当 表达式1 的值为 true 时, 整个表达式的值为 表达式2 的值;

当 表达式1 的值为 false 时, 整个表达式的值为 表达式3 的值.

注意:

1. 表达式2和表达式3的结果要是同类型的,除非能发生类型隐式类型转换

public static void main(String[] args) {int a=10;double b=12.6;int c1;double c2;c2=a>b?a:b;c1=a>b?a:b;}

如图:c2是可以发生转换的,所以可以使用。c1则不行。 

 

2. 表达式不能单独存在,其产生的结果必须要被使用


文章已到末尾,喜欢的话点个赞吧。

 

相关文章:

【一步一步了解Java系列】:了解Java与C语言的运算符的“大同小异”

看到这句话的时候证明&#xff1a;此刻你我都在努力~ 加油陌生人~ 个人主页&#xff1a; Gu Gu Study ​​ 专栏&#xff1a;一步一步了解Java 喜欢的一句话&#xff1a; 常常会回顾努力的自己&#xff0c;所以要为自己的努…...

ICSE docker related research

ICSE 2024 Empirical Study of the Docker Smells Impact on the Image Size Docker 气味对镜像大小影响的实证研究 Docker 是一种广泛采用的打包和部署应用程序的工具&#xff0c;它利用 Dockerfile 来构建镜像。然而&#xff0c;创建最佳的 Dockerfile 可能具有挑战性&…...

【C++】学习笔记——多态_1

文章目录 十二、继承8. 继承和组合 十三、多态1. 多态的概念2. 多态的定义和实现虚函数重写的两个特殊情况override 和 final 3. 多态的原理1. 虚函数表 未完待续 十二、继承 8. 继承和组合 我们已经知道了什么是继承&#xff0c;那组合又是什么&#xff1f;下面这种情况就是…...

C++map容器关联式容器

Cmap 1. 关联式容器 vector、list、deque、forward_list(C11)等STL容器&#xff0c;其底层为线性序列的数据结构&#xff0c;里面存储的是元素本身&#xff0c;这样的容器被统称为序列式容器。而map、set是一种关联式容器&#xff0c;关联式容器也是用来存储数据的&#xff0…...

TS-抽象类和静态成员

目录 1&#xff0c;抽象类1&#xff0c;为什么需要抽象类2&#xff0c;抽象成员3&#xff0c;设计模式-模板模式 2&#xff0c;静态成员1&#xff0c;什么是静态成员2&#xff0c;设计模式-单例模式 1&#xff0c;抽象类 1&#xff0c;为什么需要抽象类 有时&#xff0c;某个…...

SharePoint 使用renderListDataAsStream方法查询list超过5000时的数据

问题&#xff1a; 当SharePoint List里的数据超过5000时&#xff0c;如果使用常用的rest api去获取数据&#xff0c;例如 await this.sp.web.lists.getByTitle(Document Library).rootFolder.files.select(*, listItemAllFields).expand(listItemAllFields).filter(listItemA…...

2024042001-计算机网络 - 物理层

计算机网络 - 物理层 计算机网络 - 物理层 通信方式带通调制 通信方式 根据信息在传输线上的传送方向&#xff0c;分为以下三种通信方式&#xff1a; 单工通信&#xff1a;单向传输半双工通信&#xff1a;双向交替传输全双工通信&#xff1a;双向同时传输 带通调制 模拟信号…...

通过java将数据导出为PDF,包扣合并单元格操作

最近项目中需要将查询出来的表格数据以PDF形式导出&#xff0c;并且表格的形式包含横向行与纵向列的单元格合并操作&#xff0c;导出的最终效果如图所示&#xff1a; 首先引入操作依赖 <!--导出pdf所需包--><dependency><groupId>com.itextpdf</groupId&…...

Java内存模式以及volatile关键字的使用

1.Java内存模型 &#xff08;1&#xff09;Java 内存模型&#xff08;Java Memory Model&#xff0c;简称 JMM&#xff09;&#xff0c;它是一个抽象的概念&#xff0c;JMM是和多线程相关的&#xff0c;它是一组规范&#xff0c;描述了一组规则&#xff0c;定义了多线程对共享…...

每日5题Day3 - LeetCode 11 - 15

每一步向前都是向自己的梦想更近一步&#xff0c;坚持不懈&#xff0c;勇往直前&#xff01; 第一题&#xff1a;11. 盛最多水的容器 - 力扣&#xff08;LeetCode&#xff09; class Solution {public int maxArea(int[] height) {//这道题比较特殊&#xff0c;因为两边是任意…...

路由器、交换机和网卡

大家使用VMware安装镜像之后&#xff0c;是不是都会考虑虚拟机的镜像系统怎么连上网的&#xff0c;它的连接方式是什么&#xff0c;它ip是什么&#xff1f; 路由器、交换机和网卡 1.路由器 一般有几个功能&#xff0c;第一个是网关、第二个是扩展有线网络端口、第三个是WiFi功…...

腾讯开源混元DiT文生图模型,消费级单卡可推理

节前&#xff0c;我们组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、今年参加社招和校招面试的同学。 针对大模型技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备面试攻略、面试常考点等热门话题进行了深入的讨论。 总结链接…...

shell脚本基础(if/else结构)

命令是双向选择语句&#xff0c;当用户执行脚本时如果不满足if后的表达式也会执行else后的命令&#xff0c;所以有很好的交互性。其结构为&#xff1a; if expression1 then command … command else command … command fi vim ifelse_exam.sh #ifelse_exam.sh #!/bin/bashec…...

万字长文破解 AI 图片生成算法-Stable diffusion (第一篇)

想象一下&#xff1a;你闭上眼睛&#xff0c;脑海中构思一个场景&#xff0c;用简短的语言描述出来&#xff0c;然后“啪”的一声&#xff0c;一张栩栩如生的图片就出现在你眼前。这不再是科幻小说里才有的情节&#xff0c;而是Stable Diffusion——一种前沿的AI图片生成算法—…...

Linux---编辑器vim的认识与简单配置

前言 我们在自己的电脑上所用的编译软件&#xff0c;就拿vs2022来说&#xff0c;我们可以在上面写C/C语言、python、甚至java也可以在上面进行编译&#xff0c;这种既可以用来编辑、运行编译&#xff0c;又可以支持很多种语言的编译器是一种集成式开发环境&#xff0c;集众多于…...

lucene中Collector类、CollectorManager类区分和用法

我的lucene版本是9.10.0&#xff0c;请说明Collector类、CollectorManager类区分和用法&#xff0c;尽量详细点 在 Lucene 9.10.0 中&#xff0c;Collector 类和 CollectorManager 类都是用于搜索结果的收集和处理 Collector 类 Collector 类是一个接口&#xff0c;用于收集…...

Android之给Button上添加按压效果

一、配置stateListAnimator参数实现按压效果 1、按钮控件 <Buttonandroid:id"id/mBtnLogin"android:layout_width"match_parent"android:layout_height"48dp"android:background"drawable/shape_jfrb_login_button"android:state…...

python EEL + vue3.js 项目中如何把组件中的函数提升为全局函数

eel官方示例中暴露的js函数是全局函数&#xff0c;vue中的自定义函数作用域通常都是组件范围内。要让eel.js调用&#xff0c;需要将其升为全局可用。 一般方法有 app.config.globalProperties 或 mixin等。 main.js //main.jsimport { createApp } from vue import App from…...

sqli-labs靶场第十四关

目录 1&#xff1a;分析 找闭合符&#xff1a; 2&#xff1a;开始注入 报错注入&#xff1a; 注入数据库名&#xff1a; 注入表名&#xff1a; 注入列名&#xff1a; 注入具体值&#xff1a; 1&#xff1a;分析 经过我们的实验发现当我们输入的密码后面存在双引号时会报…...

【C语言】6.C语言VS实用调试技巧(1)

文章目录 1.什么是 bug2.什么是调试&#xff08;debug&#xff09;&#xff1f;3.Debug 和 Release4.VS调试快捷键4.1 环境准备4.2 调试快捷键 5.监视和内存观察5.1 监视5.2 内存 1.什么是 bug bug现在一般是指在电脑系统或程序中&#xff0c;隐藏着的一些未被发现的缺陷或问题…...

在软件开发中正确使用MySQL日期时间类型的深度解析

在日常软件开发场景中&#xff0c;时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志&#xff0c;到供应链系统的物流节点时间戳&#xff0c;时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库&#xff0c;其日期时间类型的…...

反向工程与模型迁移:打造未来商品详情API的可持续创新体系

在电商行业蓬勃发展的当下&#xff0c;商品详情API作为连接电商平台与开发者、商家及用户的关键纽带&#xff0c;其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息&#xff08;如名称、价格、库存等&#xff09;的获取与展示&#xff0c;已难以满足市场对个性化、智能…...

uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖

在前面的练习中&#xff0c;每个页面需要使用ref&#xff0c;onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入&#xff0c;需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

1688商品列表API与其他数据源的对接思路

将1688商品列表API与其他数据源对接时&#xff0c;需结合业务场景设计数据流转链路&#xff0c;重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点&#xff1a; 一、核心对接场景与目标 商品数据同步 场景&#xff1a;将1688商品信息…...

生成 Git SSH 证书

&#x1f511; 1. ​​生成 SSH 密钥对​​ 在终端&#xff08;Windows 使用 Git Bash&#xff0c;Mac/Linux 使用 Terminal&#xff09;执行命令&#xff1a; ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" ​​参数说明​​&#xff1a; -t rsa&#x…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成

厌倦手动写WordPress文章&#xff1f;AI自动生成&#xff0c;效率提升10倍&#xff01; 支持多语言、自动配图、定时发布&#xff0c;让内容创作更轻松&#xff01; AI内容生成 → 不想每天写文章&#xff1f;AI一键生成高质量内容&#xff01;多语言支持 → 跨境电商必备&am…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)

在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

LeetCode - 199. 二叉树的右视图

题目 199. 二叉树的右视图 - 力扣&#xff08;LeetCode&#xff09; 思路 右视图是指从树的右侧看&#xff0c;对于每一层&#xff0c;只能看到该层最右边的节点。实现思路是&#xff1a; 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...

初探Service服务发现机制

1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能&#xff1a;服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源&#xf…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲

文章目录 前言第一部分&#xff1a;体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分&#xff1a;体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...