java 运算符

在算术运算符部分,需要特别注意的一个语法现象是“晋升”。晋升指低于int的3种数字类型(byte、short和char)进行算术运算后,结果会自动提升成int类型。示例代码如下:

byte b1 = 10;

byte b2 = 20;

byte b3 = b1 + b2; //语法错误,类型不匹配

int n = b1 + b2; //或者 byte b3 = (byte)(b1 + b2);


最后说一下&&和&的区别,其实在进行逻辑与运算时,既可以使用&&也可以使用&,在功能上本身没有区别。两者区别的位置在,对于&来说,如果左侧条件为false,也会计算右侧条件的值,而对于&&来说,如果左侧的条件为false,则不计算右侧的条件,这种现象被称作短路现象。

示例代码:

int n = -1;

boolean b1 = (n >= 0) && (n < 10);

boolean b2 = (n >= 0) & (n < 10);

则对于第二行代码来说,两个条件都将被计算,而对于第三行代码来说,因为n >= 0这个条件不成立,则n < 10根本不会被执行。当然,两者得到的最终结果是一样的。

对于现在的代码来说,区别不大,但是如果后续的条件是一个方法(方法的概念后续将介绍到),则将影响程序逻辑。




由于计算机内部的数据都以二进制的形式存在,所以在Java语言中提供了直接操作二进制的运算符,这就是下面要讲解的位运算符和移位运算符。

使用二进制的运算符,可以直接在二进制的基础上对数字进行操作,执行的效率比一般的数学运算符高的多,该类运算符大量适用于网络编程、硬件编程等领域。

二进制运算符在数学上的意义比较有限。

在Java代码中,直接书写和输出的数值默认是十进制,Java代码中无法直接书写二进制数值,但是可以书写八进制和十六进制数字,八进制以数字0开头,例如016,十六进制以数字0和x开头,例如0x12,0xaf等等。

在计算二进制运算时,Java语言的执行环境(JRE)首先将十进制的数字转换为二进制,然后进行运算。如果输出结果的值,则数字会被转换成十六进制进行输出。

需要注意的是:

1、正数的机器数是原码,负数的机器数是补码,计算时需要小心。关于二进制和补码的计算可以参看《Java编程那些事儿7——进制的概念》和《Java编程那些事儿8——计算机内部的数据表达》。

2、整数型的计算结果都是int型,而不管是对byte还是short进行二进制运算。

4.5.1 位运算符

Java语言中的位运算符主要有4种:&(位与)、|(位或)、^(异或)和~(按位取反),下面依次介绍运算规则和使用示例。

l &(AND)

运算规则:参与运算的数字,低位对齐,高位不足的补零,对应的二进制位都为1,则运算结果为1,否则为0。

适用场合:屏蔽数字中某一位或某些位。因为任何数和0与都是0。

示例代码:

int a = 4;

int b = 10;

int c = a & b;

计算过程:

4的二进制形式为0000 0000 0000 0000 0000 0000 0000 0100

10的二进制形式为0000 0000 0000 0000 0000 0000 0000 1010

按照计算规则,结果为0000 0000 0000 0000 0000 0000 0000 0000

这个数字转换为十进制就是数字0

l | (OR)

运算规则:参与运算的数字,低位对齐,高位不足的补零,对应的二进制位有一个为1则为1,否则为0。

适用场合:将数字中某一位或某些位修改成1。因为1和任何数或都是1。

示例代码:

int a = 4;

int b = -10;

int c = a | b;

计算过程:

4的二进制形式为0000 0000 0000 0000 0000 0000 0000 0100

-10的二进制形式为1111 1111 1111 1111 1111 1111 1111 0110

按照计算规则,结果为1111 1111 1111 1111 1111 1111 1111 0110

这个二进制数转换为十进制就是数字-10。

l ^(XOR)

运算规则:参与运算的数字,低位对齐,高位不足的补零,对应的二进制位相同为零,不相同为1。

适用场合:判断数字对应的位是否相同。

示例代码:

int a = 4;

int b = 10;

int c = a ^ b;

计算过程:

4的二进制形式为0000 0000 0000 0000 0000 0000 0000 0100

10的二进制形式为0000 0000 0000 0000 0000 0000 0000 1010

按照计算规则,结果为0000 0000 0000 0000 0000 0000 0000 1110

这个数字转换为十进制就是数字14

l ~(NOT)

运算规则:只操作一个数字,将该数字中为1的位变成0,为0的位变成1。

适用场合:反转数字的内容

示例代码:

int a = 4;

int c = ~a;

计算过程:

4的二进制形式为0000 0000 0000 0000 0000 0000 0000 0100

按照计算规则,结果为1111 1111 1111 1111 1111 1111 1111 1011

这个数字转换为十进制就是数字-5。

其实位运算和实际的应该实现保持一致,也就是提供的电路级运算符号,每种运算符都有对应的电路实现。

实际使用简单示例:

把任意数字转换为正数

假设n是一个任意的整数,则把n转换为正数的代码为:

int m = n & 0x7fffffff;

判断任意数字倒数第三位的值是否为1

假设n是一个任意的整数,则判断的代码为:

int m = n & 0x4;

boolean b = (m != 0);

将任意数字倒数第四位置为1

假设n是一个任意的整数,则代码为:

int m = n | 0x8;



4.5.2 移位运算符

移位运算符就是在二进制的基础上对数字进行平移。按照平移的方向和填充数字的规则分为三种:<<(左移)、>>(带符号右移)和>>>(无符号右移)。

在移位运算时,byte、short和char类型移位后的结果会变成int类型,对于byte、short、char和int进行移位时,规定实际移动的次数是移动次数和32的余数,也就是移位33次和移位1次得到的结果相同。移动long型的数值时,规定实际移动的次数是移动次数和64的余数,也就是移动66次和移动2次得到的结果相同。


例如11 >> 2,则是将数字11右移2位

计算过程:

11的二进制形式为:0000 0000 0000 0000 0000 0000 0000 1011,然后把低位的最后两个数字移出,因为该数字是正数,所以在高位补零。则得到的最终结果是0000 0000 0000 0000 0000 0000 0000 0010。转换为十进制是2。
Java——运算符 对两个操作数的对应位执行与操作。仅当对应位均为1时,结果位才为1,否则为0。int b = 5;运行结果:下面进行具体分析:最终结果为 1 ,与运行结果一致。对两个操作数的对应位执行或操作。只要对应位有一个为1,结果位就为1,否则为0。int b = 5; 阅读详情

相关推荐

EnetCito:Enet 可靠的 UDP 网络库,适用于 Java、C#、JavaScript、ActionScript、Perl 和 D,使用 Cito

埃内西托 使用的 Enet 可靠 UDP 网络库的端口,用于 Java、C#、JavaScript、ActionScript、Perl 和 D。 下载 地位 还不能用。 它正在连接和发送数据包,但没有经过测试。

enet java 可靠udp,ENet

软件简介ENet 是一个易用的、可移植的 UDP 网络开发包,主要功能包括连接管理、可靠的按顺序的多通道包传输机制、包分解和重新打包、避免堵塞机制等。下面是一个用 ENet 创建的服务器端代码示例:ENetAddress address;ENetHost * server;/* Bind the server to the default localhost. *//* A specifi...

weixin_32273747的博客 310

ENet(可靠UDP)

ENet-1.3.13 NDK编译源码。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

java视频教程enet网络_Android 巧妙封装,基于Retrofit+RxJava网络框架

前言Leopard 意为猎豹,在所有猫科动物中。猎豹体型最小,速度快、最稳定。这也是笔者想用这个名字命名这个Kit的原因。希望这个Kit能对部分开发者对于网络框架封装的一些思路有所帮助,笔者也在奋斗路上坚持总结进步中,共勉!Leopard,目前实现功能提供一个满足日常需求的HTTP线程安全请求封装Library,底层由Retrofit+Okhttp+RxJava支持,通过构建者builder设计模...

weixin_32014283的博客 259

可靠的UDP网络库_eNet(安装包+教程)

ENet的目的是在UDP(用户数据报协议)之上提供一个相对简单,健壮的网络通信层。它提供的主要功能是可选的可靠,有序的数据包传送。

米哈游 AI产品经理面试题精选:10道高频考题+答案解析(附PDF)

米哈游是全球知名游戏开发商,以《原神》《崩坏》系列著称,专注二次元文化与AI技术创新。本文整理了10道AI产品经理面试题,涵盖Transformer架构、智能NPC设计、机器学习应用、AIGC产品规划等核心领域。题目既考察技术理解(如RAG原理、多模态模型),又关注产品落地(游戏平衡性优化、伦理安全),同时强调跨团队协作能力。参考答案均结合米哈游业务场景,体现技术驱动与玩家体验并重的产品思维,展现AI在游戏行业的创新应用前景。

ZHHHHH15的博客 682

【Java基础】Java的运算符

算术运算符都是双目运算符,即连接两个操作数的运算符。优先级上,*、/、% 具有相同运算级别,并高于 +、-(+、- 具有相同级别)加减乘除,很简单就不用说了,大家都懂,就这个取余要求必须是两个整型数字才行++ 或 - - 是单目运算符,放在操作数的前面或后面都是允许的。++运算,变量自增长1;- -运算,变量自减少1。那么如果有一个变量i,++i和i++有什么区别呢?独立运算时:i++和++i没有区别,都是实现自动加1的功能混合运算时:i++和++i就不同了1.++/- -在先,先运算后取值 2.++/-

wang_qiu_hao的博客 6393

Silly Tavern(酒馆)AI 角色扮演下载与安装教程(Windows本地部署)

SillyTavern是一款开源AI角色扮演前端工具,支持沉浸式对话和长期角色互动。本文详细介绍了在Windows系统F盘部署SillyTavern的完整流程,包括下载项目、安装Node.js和Git环境、配置路径、启动服务等关键步骤,并特别说明非系统盘路径可能遇到的npm安装问题及解决方法。成功启动后,用户可通过浏览器访问本地地址使用该工具进行AI角色扮演互动。

Tan3851的博客 1万+

Java中有哪些运算符?Java运算符介绍

运算符是对常量或者变量进行操作的符号,Java的运算符有六类:算数运算符、赋值运算符、自增自减运算符、关系运算符、逻辑运算符,三元运算符、用运算符把常量或者变量连接起来符合java语法的式子就可以称为表达式。不同运算符连接的表达式体现的是不同类型的表达式。下面来具体看一下: 1.算数运算符和算术运算符的表达式 举例说明: int a = 10;int b = 20;int c = a + b; +:是运算符,并且是算术运算符。 a + b:是表达式,由于+是算术运算符,所以这个表达式叫算术表达式。 注意

Aa112233aA1的博客 1万+

武汉大学朱玉贤院士团队再发Nature Genetics,阐述棉花独特折叠胚胎形成的分子调控与演化机制

武汉大学朱玉贤院士团队再发Nature Genetics,阐述棉花独特折叠胚胎形成的分子调控与演化机制。

Pangenes的博客 1335

KUKA机器人编程实战:5分钟搞定组输入与组输出的信号配置(附代码示例)

本文详细介绍了KUKA机器人编程中组输入与组输出的信号配置方法,通过5分钟快速掌握核心技巧。文章包含信号声明语法、典型配置流程及高级应用技巧,并附有代码示例,帮助工程师高效实现机器人与外部设备的通信。

efc123456的博客 851

Java运算符

文章目录定义分类算术运算符比较运算符(关系运算符)赋值运算符逻辑运算符(符号的两端都是boolean类型)位运算符(两端都是数值型的数据)三元运算符(三目运算符)运算符的优先级 定义 运算符指明对操作数的运算方式。 分类 算术运算符 + - + - * / % ++ -- + 注意事项 1、/ 左右两端的类型需要一致; 2、%最后的符号和被模数相同; 3、前++;先+1,后运算 后++;先...

ThinkWon的博客 2万+

华南理工大学电子与信息学院23年预推免复试面试经验贴

华南理工大学电子与信息学院23年预推免复试面试经验贴

Scut_Ty的博客 3297

JAVA 运算符

Java 运算符 算数运算符、赋值运算符、关系运算符、逻辑运算符、位运算符、三元运算符

qq_53312143的博客 5005

同态加密与SEAL库实战:CKKS参数调优避坑指南

本文深入探讨了同态加密技术中CKKS方案的参数调优实践,重点解析了SEAL库中`poly_modulus_degree`、`coeff_modulus`和`scale`三大核心参数的配置技巧与避坑指南。通过实战案例展示了如何平衡计算深度、精度与性能,为开发者提供了一套完整的参数优化方法论,帮助避免常见的'scale out of bounds'等错误,显著提升同态加密应用的可靠性和效率。

weixin_29315569的博客 229

用 CL_ABAP_ZIP 在 ABAP 里打包任意文件:从前端多选到 ZIP 交付的一条龙实践

本文介绍了在SAP ABAP中实现文件打包交付的完整解决方案。文章首先区分了ZIP和GZIP的不同用途:ZIP用于多文件归档,GZIP用于单数据流压缩。核心流程包括四个步骤:文件选择、二进制上传、内存打包和ZIP输出,并提供了关键对象与函数的速查表。针对实际项目中常见的乱码、大文件处理等问题给出了解决方案,最后展示了一个完整的可运行示例代码,涵盖了从文件选择到下载的全流程实现。该方案适用于财务、质量、运维等多种业务场景,能够有效解决多文件交付的最后一公里问题。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 216

【Java】运算符

我不去想是否能够成功, 既然选择了远方, 便只顾风雨兼程。

拼命阿紫冲冲冲! 1万+

QT上位机开发(掌握一点c++基础)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 c++是c语言的补充和扩展,本身的语法构成也是在一直迭代中。相信很多同学上大学读书的时候,或多或少对c语言有所了解,对它的变量、指针、函数也应该不陌生。既然大家都有c语言基础的话,那么在这方面稍微拓展一下的话,就可以学会c++了。当然c++本身的内容很多,很多方面还很琐碎,但我们学习的时候还是应该把精力放在那些经常使用到的语法上面。

嵌入式-老费,一个分享专业嵌入式知识的blog 1131

JAVA运算符

Java语言支持如下运算符:算术运算符:+(正),-(负),,+(加),-(减),*(乘),/(除),%(取余运算,也叫取模运算),+(字符串连接)自增(前),先运算后取值自增(后),先取值后运算a=2;b=++aa=2;b=a++a=3,b=3a=3,b=2自减(前),先运算后取值自减(后),先取值后运算a=2;b=--aa=2;b=a--a=1,b=1a=1,b=2赋值运算符:=比较运算符:>,

超级程序诞生的博客 1万+

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

【JAVA】 java运算符

摘要:本文介绍了Java中的各类运算符及其使用方法。主要内容包括:1)算术运算符(四则运算、取余、自增自减),强调int/int会向下取整和类型提升;2)关系运算符(==,!=,<,>等)返回布尔值;3)逻辑运算符(&&,||,!)及其短路特性;4)位运算符(&,|,~,^)的二进制运算;5)移位运算符(<<,>>,>>>)的高效计算;6)条件运算符(三目运算符)的简化写法。文章通过代码示例详细说明各运算符的特性,并提醒运算符优先

weixin_74163692的博客 1434

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

java运算符

一、算术运算符(+、-、*、/、%、 ++自增、–自减 ) 如下图总结: 二、赋值运算符(=、-=、+=、*=、/=) 如下图总结: 三、关系运算符(比较运算符==、!=、&gt;、&gt;=、&lt;、&lt;=) 如下图总结: 四、逻辑运算符(布尔运算符 &amp;&amp;(短路与)、||(短路或)、! 非) 特点:支持短路运算,效率高 如下图总结: 五、位运算: 特点:只对byt...

weixin_44477677的博客 3310

JAVA——运算符

运算符

2301_80055001的博客 1283

Java 运算符和Java运算符优先级

Java 运算符和Java运算符优先级Java 运算符算术运算符关系运算符逻辑运算符赋值运算符条件运算符(?:)位运算符Java运算符优先级 Java 运算符 我们可以把运算符分成以下几组: 算术运算符 关系运算符 位运算符 逻辑运算符 赋值运算符 其他运算符 算术运算符 算术运算符用在数学表达式中,它们的作用和在数学中的作用一样。 假设整数变量A的值为10,变量B的值为20: 关系运算符 下表为Java支持的关系运算符 表格中的实例整数变量A的值为10,变量B的值为20: 逻辑运算符 下表列出了

雪落无痕的博客 3122
上一篇: java中byte转换int时为何与0xff进行与运算
下一篇: Java正则表达式的解释说明
enet_java
博客等级 码龄21年 20粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值