【JavaSE】运算符详解及与C语言中的区别

news2024/11/25 18:31:38

 

在文章的最后,总结了Java与C语言的某些不同点 

目录

一、什么是运算符

二、算术运算符

1.基本四则运算符

2.增量运算符

3.自增/自减运算符++/--

三、关系运算符

四、逻辑运算符(重点)

1.逻辑与&&

2.逻辑或||

3.逻辑非

4.补充

五、位运算符

1.位运算符介绍

2.按位与&

3.按位或|

4.按位异或^

5.按位取反~

六、移位运算符(了解)

1.左移操作符<<

2.右移操作符>>

七、条件运算符

八、运算符的优先级及运算符总结

总结:与C语言的不同点



一、什么是运算符

运算符就是对操作数进行操作时的符号,不同运算符操作的含义不同

部分运算符在使用时会发生整形提升操作

二、算术运算符

算术运算符有三种:基本四则运算符、增量运算符和自增/自建运算符

1.基本四则运算符

基本四则运算的运算符包括五个:+    -   *   /(整除)     %(取余或者取模)

(1)/的规则(注意事项)

【加小数点问题】int / int 结果还是int类型,而且会向下取整

如:

public static void main(String[] args) {
        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);

    }

所以,当左右两边不是float时,需要加上.0或者*1.0

【操作数取值】

当做除法时,右边的操作符不能是0,否则编译器会报错误(算术错误),如:10/0,这是错误的。

(2)%的规则

(1)与/一样,右边的操作数不能是0,如:10%0

(2)% 不仅可以对整型取模,也可以对double类型取模,但是没有意义,一般都是对整型取模的。也就是%的结果可以有小数和负数。

(3)四则运算符规则

都是二元运算符,使用时必须要有左右两个操作数。两侧操作数类型不一致时,向类型大的提升

2.增量运算符

增量运算符包括:+=    -=    *=    %=

如:操作完成后,会将操纵的结果赋值给左操作数

int a = 1;
a += 2;          // 相当于 a = a + 2
System.out.println(a);  // 输出3
a -= 1;          // 相当于 a = a - 1
System.out.println(a);  // 输出2
a *= 3;          // 相当于 a = a * 3
System.out.println(a);  // 输出6
a /= 3;          // 相当于 a = a / 3
System.out.println(a);  // 输出2
a %= 3;          // 相当于 a = a % 2
System.out.println(a);  // 输出2

注意:只有变量才能使用该运算符,常量不能使用

3.自增/自减运算符++/--

【符号特点】++是给变量的值+1,--是给变量的值-1。

【分类】分为前置/后置++/--,如:a++(后置++,使用完后++),++a(前置++,++完后再使用)

【使用】

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
  • 只有变量才能使用自增/自减运算符,常量不能使用,因为常量不允许被修改

三、关系运算符

六个关系运算符其计算结果是 true 或者 false 。 

(1)==:相等符号,用来判断两个式子是否相等

(2)!=:不等于符号,用来判断是否不相等

(3)>:大于号,用来判断大小

(4)<:小于号,用来判断大小

(5)>=:大于等于号,

(6)<=:大于等于号

【使用】

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

四、逻辑运算符(重点)

逻辑运算符包括三个,&&、||、!,运算结果都是 boolean类型。

1.逻辑与&&

【语法规则】表达式1&&表达式2

注意:表达式1和表达式2都必须是boolean的结果,两边的结果都为true,整体才为true

【规则】

表达式1表达式2结果

【使用举例】

public static void main(String[] args) {
    
        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); // 左为假 且 右为假 则结果为假
    }

结果:

 【用处】常用于要求两个条件需要同时满足时,如果if语句中的条件等

【短路与】逻辑与也称为短路与

什么意思呢?就是当表达式1为假的时候,表达式2不会去执行(因为没有必要再去侦察它的真假,系统就会跳过表达式2)

如:下面的代码是不会报错的

 int i=111;
        System.out.println(i > 222 && (10/0)==0);

结果:

10/0的表达式是错误的,但是因为第一个表达式是错的,发生了短路,就不会再去判断第二个表达式

2.逻辑或||

【语法规则】表达式1||表达式2

注意:表达式1和表达式2都必须是boolean的结果,两边有一个为true,整体的结果就为true。

【规则】

表达式1表达式2结果

【使用举例】

public static void main(String[] args) {

        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); // 左为假 且 右为假 则结果为假
    }

结果:

【短路或】逻辑或也称为短路或

 同样,当表达式1为真时,不会再去执行表达式2.

3.逻辑非

【语法规则】!表达式

注意:假边真,真变假。

【规则】

表达式结果

【使用】

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

 【注意】

在C语言中,可能会用(!数值)表示条件,如:if(!a),在java中,这是不允许的

4.补充

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

五、位运算符

1.位运算符介绍

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

操作对象:二进制的补码

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

2.按位与&

(1)&的特点:如果两个二进制位都是 1, 则结果为 1, 否则结果为 0

&的口诀:有0为0,全1为1。

(2)用法举例

public static void main(String[] args) {
        int a=10;
        int b=15;
        System.out.println(a&b);
    }

a&b的结果:10

运算过程:

3.按位或|

(1)|的特点:如果两个二进制位都是 0, 则结果为 0, 否则结果为 1.

|的口诀:有1为1,全0为0。简称同为0

(2)用法举例

public static void main(String[] args) {
  
        int c=10;
        int d=15;
        System.out.println(c|d);
    }

c|d的结果:15

按位与过程:

4.按位异或^

(1)^的特点:如果两个数字的二进制位相同, 则结果为 0, 相异则结果为 1.

口诀:找不同,用1标记;相同为0,相异为1

性质:

(1)支持交换律

(2)相同异或为0:a^a=0

(3)任何数异或0等于本身:a^0=a

(2)用法举例:

 public static void main(String[] args) {
        int a=10;
        int b=15;
        System.out.println(a^b);

    }

a^b的结果:5

异或的过程:

5.按位取反~

(1)如果该位为 0 则转为 1, 如果该位为 1 则转为 0,又称异或非

如:10的补码为00001010,则会转为11110101

(2)用法举例

public static void main(String[] args) {
        int a=10;
        System.out.println(~a);

    }

取反结果:-11

取反过程:

六、移位运算符(了解)

1.左移操作符<<

(1)特点:左边丢弃,右边补0

注意点:因为最左边丢弃的是符号位,因此正数左移有可能变成负数

(2)用法举例:

public static void main(String[] args) {
        int a=10;
        System.out.println(a);
        System.out.println(a<<1);
        System.out.println(a<<2);

    }

左移结果:

左移过程解析:

(3)注意事项

左移的长度需要是非负数

左移一次具有*2的效果

2.右移操作符>>

右移操作符有两种:符号右移和无符号右移

(1)符号右移>>

【语法特点】最右侧位不要了, 最左侧补符号位(正数补0, 负数补1)

【用法举例】

 public static void main(String[] args) {
        int a=10;
        System.out.println(a>>1);
        System.out.println(a>>2);
    }

右移结果:

右移过程刨析:

【注意事项】

(1)右移的长度需要是非负数和整数

(1)右移一位具有/2的效果,两位具有/2^2的效果,但是-1例外,会得到本身

(2)无符号右移>>>(与C的写法不同)

【语法特点】最右侧位不要了, 最左侧补都补0

【语法举例】

public static void main(String[] args) {
       int a=10;
       System.out.println(a>>>1);
       int b=-10;
       System.out.println(b>>>1);
    }

无符号右移结果:5、2147483643(整形最大值)

解析:因为最左侧丢掉的是符号位,负数会变成正数;正数依旧是/2的效果

七、条件运算符

条件运算符也成为三目运算符,是Java中唯一一个三目运算符。

(1)语法特点:表达式1 ? 表达式2 : 表达式3

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

【注意】

(1)表达式1的值必须是布尔表达式

(2)表达式1的值需要用变量来接收或者直接打印

(2)实例:求两个数的最大值

public static void main(String[] args) {
       int a = 520;
       int b = 1314;
       int max = a>b?a:b;
       System.out.println(max);
    }

表达式1:a>b,他们必须直接必须有一个结果

八、运算符的优先级及运算符总结

不同的符号存在优先级,但是符号很多,我们不需要记忆,只需要规范使用小括号就可以。

总结:与C语言的不同点

(1)基本四则运算符中的取模符%

在C中,%的结果只有正数;而在Java中,可以有小数和负数

(2)逻辑非!

在C中,!的左边可以是数字,或者表达式,如!1;在Java中,!的左边必须是布尔表达式,就是表达式的结果比赛true就是false

(3)|与&

Java中,& 和 | 如果表达式结果为 boolean 时, 也表示逻辑运算.。但是在C中没有这种说法

(4)无符号右移操作符>>>

无符号右移操作符其实就是右移操作符的一种操作规则。在C语言中,右移操作符都是>>,只是在不同的平台上有不同的右移方式(右移方式不能自己决定);而在Java中,把他们分离开来,成为了两个符号,右移的方式在操作者手中。


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

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

相关文章

SQL Server 安装失败 服务“MSSQLServerOLAPService”启动请求失败 一定有效的解决方案

问题描述 首次安装 SQL Server 2022&#xff0c;在安装结束时出现弹窗“无法启动服务。原因&#xff1a;服务“MSSQLServerOLAPService”启动请求失败”。 点击“确定”按钮后&#xff0c;出现新弹窗。 问题原因 在Windows服务中手动启动“MSSQLServerOLAPService”&#x…

建筑木模板现货供应,广东隧道地铁木模板批发。

我们是一家专业供应建筑木模板的公司&#xff0c;提供广东地区的现货供应服务。我们特别推荐我们的隧道地铁木模板&#xff0c;专为隧道和地铁工程而设计&#xff0c;为工程施工提供优质可靠的支撑材料。我们的隧道地铁木模板采用高品质的木材制造而成&#xff0c;具有卓越的强…

muduo源码剖析之Buffer缓冲区类

简介 Buffer封装了一个可变长的buffer&#xff0c;支持廉价的前插操作&#xff0c;以及内部挪腾操作避免额外申请空间 使用vector作为缓冲区(可自动调整扩容) 设计图 源码剖析 已经编写好注释 buffer.h // Copyright 2010, Shuo Chen. All rights reserved. // http://c…

msvcp140.dll丢失的正确解决方法

在使用电脑中我们经常会遇到一些错误提示&#xff0c;其中之一就是“msvcp140.dll丢失”。这个错误通常会导致某些应用程序无法正常运行。为了解决这个问题&#xff0c;我们需要采取一些措施来修复丢失的msvcp140.dll文件。本文将介绍6个不同的解决方法&#xff0c;帮助读者解决…

java lombok

Lombok是一个实用的Java类库&#xff0c;可以通过简单的注解来简化和消除一些必须有但显得很臃肿的Java代码。 通过注解的形式自动生成构造器、getter/setter、equals、hashcode、toString等方法&#xff0c;并可以自动化生成日志变量&#xff0c;简化java开发、提高效率&#…

AI:39-基于深度学习的车牌识别检测

🚀 本文选自专栏:AI领域专栏 从基础到实践,深入了解算法、案例和最新趋势。无论你是初学者还是经验丰富的数据科学家,通过案例和项目实践,掌握核心概念和实用技能。每篇案例都包含代码实例,详细讲解供大家学习。 📌📌📌本专栏包含以下学习方向: 机器学习、深度学…

不用动脑子的技巧!已知二叉树的前序中序遍历,确定二叉树/求后序遍历

根据前&#xff08;后&#xff09;序、中序&#xff0c;确定二叉树&#xff0c;高妙的方法&#xff01;&#xff01;&#xff01; 二叉树的前中后序遍历⏩巧妙的方法&#xff01;根据前序遍历和中序遍历&#xff0c;确定二叉树例题1例题2 根据后序遍历和中序遍历&#xff0c;确…

CS224W3.2——随机游走(Random Walk)

上一文中说道定义节点相似度函数的时候使用Random Walk方法&#xff1a; CS224W3.1——节点Embedding 这节课来说一下Random Walk方法。在这篇中&#xff0c;我们来看一个更有效的相似函数——在图上随机游走的节点共现的概率。我们介绍随机游走背后的直觉&#xff0c;我们将…

中电文思海辉:塑造全球AI能力,持续强化诸多行业战略

【科技明说 &#xff5c; 重磅专题】 中电文思海辉以前就是叫文思海辉&#xff0c; 这是由之前两家上市软件外包公司文思信息和海辉软件合并而来&#xff0c;2018年当时各自股票以1:1的比例进行整合&#xff0c;双方股东各持有新公司50%的股权&#xff0c;合并后新公司名称为文…

私有云:【4】Esxi安装Server2012R2

私有云&#xff1a;【4】Esxi安装Server2012R2 1、使用Esxi安装虚拟机2、启动虚拟机3、安装必要服务及打补丁 1、使用Esxi安装虚拟机 选择esxi虚拟机挂在Win2012的镜像iso 使用Esxi客户端新建虚拟机 设置虚拟机名称及系统作为模板&#xff0c;如图所示 选择数据存储&#xff0…

mysql 增删改查基础命令

数据库是企业的重要信息资产&#xff0c;在使用数据库时&#xff0c;要注意(查和增,无所谓,但是删和改,要谨慎! ) 数据库管理系统(DBMS) :实现对数据的有效组织&#xff0c;管理和存取的系统软件 mysgl 数据库是一个系统&#xff0c; 是一个人机系统&#xff0c;硬件, gs,数据库…

软件设计师做题技巧(下午题)

第一题 数据流图 名词解释外部实体系统外部现实世界存在的物体 矩形表示数据存储一般都是数据库表名 矩形表示数据流数据如何在系统中流动和传输加工/数据处理系统的计算或者操作 圆角矩阵表示数据流图等级数据流图等级是指所涉及的数据项和处理的复杂程度 采用结构化语言对x…

【5G PHY】5G SS/PBCH块介绍(二)

博主未授权任何人或组织机构转载博主任何原创文章&#xff0c;感谢各位对原创的支持&#xff01; 博主链接 本人就职于国际知名终端厂商&#xff0c;负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作&#xff0c;目前牵头6G算力网络技术标准研究。 博客…

链式存储方式下字符串的replace(S,T1,T2)运算

链式存储方式下字符串的replace运算 ⭐️题目⭐️思路⭐️代码✨定义结点✨打印字符串函数✨计算字符串函数✨初始化字符串函数✨代码解读✨字符串替换函数✨字符串替换函数解读✨ 主函数✨完整代码 实现在链式存储下字符串的replace(S,T1,T2)&#xff0c;来自课本习题的一道题…

[Linux]线程池

[Linux]线程池 文章目录 [Linux]线程池线程池的概念线程池的优点线程池的应用场景线程池的实现 线程池的概念 线程池是一种线程使用模式。线程池是一种特殊的生产消费模型&#xff0c;用户作为生产者&#xff0c;线程池作为消费者和缓冲区。 线程过多会带来调度开销&#xff0c…

【计算机视觉】对极几何

文章目录 一、极线约束&#xff08;Epipolar Constraint&#xff09;二、相机标定过的情况三、相机没有标定过的情况四、八点算法&#xff08;eight-point algorithm&#xff09; 我的《计算机视觉》系列参考UC Berkeley的CS180课程&#xff0c;PPT可以在课程主页看到。 在上一…

进行商城的测试用例设计思路是什么?

进行商城的测试用例设计时&#xff0c;可以考虑以下思路&#xff1a; 1. 功能测试&#xff1a;测试商城的基本功能是否正常工作&#xff0c;包括用户注册、登录、浏览商品、搜索商品、添加商品到购物车、下单、支付等。 2. 数据验证测试&#xff1a;验证商城中的数据是否正确…

深入浅出认识Kubernetes

用来管理容器&#xff0c;容器编排工具 容器化有助于打包软件来实现这些目标&#xff0c;从而使应用程序可以轻松快速地发布和更新&#xff0c;而无需停机。Kubernetes可帮助您确保那些容器化的应用程序在所需的位置和时间运行&#xff0c;并帮助他们找到工作所需的资源和工具。…

10阶杨辉三角

【任务需求】 定义一个函数&#xff0c;根据杨辉三角的数学概念&#xff0c;使用循环嵌套进行编写实现杨辉三角的关&#xff0c;并用for循环实现10阶杨辉三角&#xff0c;最后输出时需使10阶杨辉三角每行数字左右对称&#xff0c;按要求编写程序。 def triangle(rows):triang…

将数据文件,控制文件,日志文件分别放在不同的目录下,且数据库正常启动

一、定位数据文件、控制文件、日志文件的位置 注意&#xff1a;后序需要用到这些文件的位置&#xff0c;可以在查询完毕之后先截图保存 1.以管理员身份登录数据库 sqlplus / as sysdba2.查找数据文件位置 SELECT name FROM v$datafile;3.查找控制文件位置 SELECT name FROM …