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

 

在文章的最后,总结了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.rhkb.cn/news/174513.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

elasticsearch一些重要的配置参数

先看一下官网给我们提供的全部的参数配置项 官网地址 官方文档链接&#xff1a;注意版本是8.1Configuring Elasticsearch | Elasticsearch Guide [8.1] | Elastic​编辑https://www.elastic.co/guide/en/elasticsearch/reference/current/settings.html 重要&#xff08;基本…

零基础Linux_24(多线程)线程同步+条件变量+生产者消费模型_阻塞队列版

目录 1. 线程同步和生产者消费者模型 1.1 生产者消费者模型的概念 1.2 线程同步的概念 1.3 生产者消费者模型的优点 2. 线程同步的应用 2.1 条件变量的概念 2.2 条件变量操作接口 3. 生产者消费者模型_阻塞队列 3.1 前期代码&#xff08;轮廓&#xff09; 3.2 中期代…

phar反序列化学习

PHP反序列化常见的是使用unserilize()进行反序列化&#xff0c;除此之外还有其它的反序列化方法&#xff0c;不需要用到unserilize()。就是用到phar反序列化。 Phar phar文件 Phar是将php文件打包而成的一种压缩文档&#xff0c;类似于Java中的jar包。它有一个特性就是phar文…

Golang教程——配置环境,再探GoLand

文章目录 一、Go是什么&#xff1f;二、环境配置验证配置环境变量 三、安装开发者工具GoLand四、HelloGolang 一、Go是什么&#xff1f; Go&#xff08;也称为Golang&#xff09;是一种开源的编程语言&#xff0c;由Google开发并于2009年首次发布。Go语言旨在提供一种简单、高…

企业文件防泄密方法

企业文件防泄密方法 安企神数据防泄密系统下载使用 企业文件是企业的核心资产&#xff0c;其中可能包含大量的敏感信息&#xff0c;如客户资料、产品配方、财务数据等。一旦这些文件泄露&#xff0c;可能会给企业带来不可估量的损失。 然而&#xff0c;企业文件防泄密是确保…

Vue 3响应式对象: ref和reactive

目录 什么是响应式对象&#xff1f; Ref Reactive Ref vs Reactive 适用场景&#xff1a; 访问方式&#xff1a; 引用传递&#xff1a; 性能开销&#xff1a; 响应式对象优点 响应式对象缺点 总结 Vue 3作为一种流行的JavaScript框架&#xff0c;提供了响应式编程的…

4.编译多线程应用程序

在不同平台下使用多线程的程序编译时的编译选项设置如下图所示。 gcc下编译时我们会碰到两个选项-pthread和-lpthread&#xff0c;记住推荐使用-pthread而不是-lpthread&#xff0c;原因如下 -lpthread只是起到链接pthread库的作用&#xff1b;而-pthread选项除了会链接pthrea…

搭建微信小程序环境及项目结构介绍

一、注册 访问微信公众平台&#xff0c;将鼠标的光标置于账号分类中的小程序上&#xff0c; 点击‘查看详情’ 点击“前往注册” 下方也可以点击注册&#xff1a; 小程序注册页面&#xff1a; 步骤a:进入小程序注册页&#xff0c;根据指引填写信息和提交相应的资料&#x…

uni-app打包之如何生成自由证书

我是使用Android Studio来直接生成。超级简单 第一步 打开 Android Studio 找到下面图片 第二步 选 Android App Bund 然后Next 第三步 选择创建新的 第四步 填写对应的 信息 密码最好都是一样的 第五步 点击ok 即可创建成功。 uniapp打包时候勾选文件 &#xff08;如果公…

SpringBoot相比于Spring的优点(自动配置和依赖管理)

自动配置 例子见真章 我们先看一下我们Spring整合Druid的过程&#xff0c;以及我们使用SpringBoot整合Druid的过程我们就知道我们SpringBoot的好处了。 Spring方式 Spring方式分为两种&#xff0c;第一种就是我们使用xml进行整合&#xff0c;第二种就是使用我们注解进行简化…

国外怎么传大文件到国内,这款传输软件跨国企业必备

从国外传输文件到国内&#xff0c;这项任务常常充满了挑战。国际之间的距离、网络延迟、数据安全和文件大小限制等问题使得这个过程异常复杂。本文将深入剖析这些挑战&#xff0c;并说明一款优秀的跨国传输软件&#xff0c;如何能够成为解决这些问题的强有力工具。 国外传输文件…

Vue的安装

----------------------------------------------------前置---------------------------------------------------- 1.node.js的下载安装、缓存路径的设置 ①安装 ②设置npm prefix, cache 2.NODE_PATH、PATH ①系统变量中加 ②PATH中加 3.配置镜像源 -----------------------…

数据库数据恢复—Oracle数据库报错ORA-01110错误的数据恢复案例

Oracle数据库故障&#xff1a; 北京某公司一台运行oracle数据库的服务器&#xff0c;机房意外断电导致该服务器重启&#xff0c;重启后发现oracle数据库报错。该Oracle数据库没有备份。 Oracle数据库数据恢复过程&#xff1a; 1、北亚企安数据恢复工程师检查该oracle数据库的数…

单目标应用:进化场优化算法(Evolutionary Field Optimization,EFO)求解微电网优化MATLAB

一、微网系统运行优化模型 微电网优化模型介绍&#xff1a; 微电网多目标优化调度模型简介_IT猿手的博客-CSDN博客 二、进化场优化算法EFO 进化场优化算法&#xff08;Evolutionary Field Optimization&#xff0c;EFO&#xff09;由Baris Baykant Alagoz等人于2022年提出&…

sd模型测试之又纯又欲的Copax Anime XL动漫大模型

除了各种美女图外&#xff0c;AI绘画大模型中&#xff0c;最受欢迎的是动漫。 动漫又分好几种&#xff0c;幼儿向、热血向、成人向等。 之前我推荐了几个风格不同的动漫大模型&#xff0c;今天推荐一个成人向的动漫大模型&#xff1a;Copax Anime XL。 当然了&#xff0c;成…

iOS调试技巧——使用Python 自定义LLDB

一、类介绍 在使用Python 自定义LLDB之前&#xff0c;先了解一下LLDB的一些类型 SBTarget 正在被调试的程序SBProcess 和程序关联的具体的进程SBThread 执行的线程SBFrame 和线程关联的一个栈帧SBVariable 变量&#xff0c;寄存器或是一个表达式 一般情况下&#xff0c;我们…

Kafka生产问题总结及性能优化实践

Kafka可视化管理工具kafka-manager 安装及基本使用可参考&#xff1a;https://www.cnblogs.com/dadonggg/p/8205302.html 线上环境规划 JVM参数设置 kafka是scala语言开发&#xff0c;运行在JVM上&#xff0c;需要对JVM参数合理设置&#xff0c;参看JVM调优专题 修改bin/kaf…

geoserver去除tif影像黑色的背景的方法

geoserver加载某些tif文件的时候,tif文件本身有黑色的背景,怎么去掉呢? 只要在geoserver中设置就行。 处理方法: 1.新建数据源时要选择ImageMosaic数据源 2,设置"Output Transparent Color" 设置"Output Transparent Color"为黑色(000000),在…

一文详解汽车电子CAN总线

0.什么是CAN总线 CAN总线(控制器区域网络Controller Area Network)是一个中央网络系统&#xff0c;连接不同的电子控制单元(ECU)以及车辆中的其他设备。现在的汽车可以有100个ECU&#xff0c;因此CAN总线通信变得非常重要。 1.CAN总线流行的背景 集中式:CAN总线系统允许对连接…

从 Hash索引、二叉树、B-Tree 与 B+Tree 对比看索引结构选择

从 Hash索引、二叉树、B-Tree 与 BTree 对比看索引结构选择 1、Hash 结构1.1、关于 Hash 数据结构1.2、InnoDB索引为啥不选 Hash 结构1.3、关于InnoDB 提供自适应 Hash 索引 &#xff08;Adaptive Hash Index&#xff09; 2、二叉搜索树3、平衡二叉树&#xff08;AVL树 &#x…