网站首页 > java教程 正文
java位运算符
位运算的操作数类型是整型,有符号的或无符号的。位运算符可以分为两大类:位逻辑运算符和位移运算符。
位运算符种类
& 与 a&b,
丨或 a|b,
~ 取反 ~a,
^ 异或 a^b,
<< 左移位 a<<3,
>> 右移位 b>>3,
>>> 无符号右移位 x>>>3
1. 位逻辑运算符
位逻辑运算符包括&、|、^和~,前三个是双目运算符,第四个是单目运算符。
(1)位逻辑与实际上是将操作数转换成二进制表示方式,然后将两个二进制操作数对象从低位(最右边)到高位对齐,每位求与, 若两个操作数对象同一位都为 1,则结果对应位为 1,否则结果对应位为0。
按位与运算符:
运算规则:两个操作数中位都为1,结果才为1,否则结果为0。例如(a的值为130,二进制为10000010;b的值为128,二进制为10000000。根据&运算符的运算法则可以知道,只有一个位都为1,结果才为1,因此结果是10000000,即128。)
(2)位逻辑或实际上是将操作数转换成二进制表示方式,然后将两个二进制操作数对象从低位(最右边)到高位对齐,每位求或,若两个操作数对象同一位都为 0,则结果对应位为 0,否则结果对应位为1。
按位或运算符:
运算规则:两个位只要有一个为1,那么结果就是1,否则就为0。例如(a的值为131,二进制为10000011;b的值为128,二进制为10000000。根据运算法则可以知道,只有两个位有一个位是1,结果就是1,因此运算结果是10000011,即131。)
(3)位逻辑异或实际上是将操作数转换成二进制表示方式,然后将两个二进制操作数对象从低位(最右边)到高位对齐,每位求异或,若两个操作数对象同一位不同时,则结果对应位为 1,否则结果对应位为0。
按位异或运算符:
运算规则:相同则结果为0,不同则结果为1。例如(a的值为15,二进制为1111;b的值为3,二进制为0011。根据运算法则可以知道,结果为1100,即12。)
(4)取反运算符,实际上是将操作数转换成二进制表示方式,然后将各位二进制位由1变为0,由0变为1。
按位非运算符:
运算规则:如果位为0,结果是1;如果位为1,结果是0。
&、|、^也可以用于逻辑运算。
2. 位移运算符
移位运算有三个,分别是左移<<、右移>>和无符号右移>>>,这三个运算符都是双目操作。
(1)左移是将一个二进制操作数对象按指定的移动位数向左移,左边(高位端)溢出的位被丢弃,右边(低位端)的空位用0补充。左移相当于乘以2的幂。
(2)右移是将一个二进制的数按指定的位数向右移动,右边(低位端)弃,左边(高位端)用符号位补充,正数的符号位为 0,负数的符号为 1。
(3)无符号右移是将一个二进制的数按指定的位数向右移动,右(低位端)弃,左边(高位端)一律用 0 填充,运算结果相当于除以 2 的幂。
左移、右移、无符号右移运算符:
左移:将运算符左边的对象,按右边制定的位数向左移动运算符,并在低位补0。向左移n位,就相当于乘以2^n。
右移:将运算符左边的运算对象按右边指定的位数向右移动运算符。如果是正数,则在高位补0;如果是复数,则在高位补1。
无号符:将运算符左边的对象按右边指定的位数向右移动运算符,并且在高位补0,其实右移n 位,就相当于除于2^n。
从二进制的实现机制来说, byte、short不适用于>>>操作。
- 上一篇: 巧用 Java 位运算解决复杂业务需求
- 下一篇: 关于位运算(位运算的运算规则)
猜你喜欢
- 2024-10-18 Java 中的移位运算符(Shift Operator)
- 2024-10-18 「每日分享」把Map中的hash()分析的最透彻的文章
- 2024-10-18 从bitmap到布隆过滤器,再到高并发缓存设计策略
- 2024-10-18 Java基础入门(运算符)(java运算符的含义)
- 2024-10-18 Day03-Java运算(三年级混合运算练习题)
- 2024-10-18 浅谈java中的数学运算(java的数学公式有哪些)
- 2024-10-18 好程序员Java学习路线分享Java中的位移运算
- 2024-10-18 全网分析Map中hash方法最透彻的一篇文章
- 2024-10-18 为什么Java String哈希乘数为31?(java中string是什么数据类型)
- 2024-10-18 Java精确运算高位数数字(java计算精度问题)
你 发表评论:
欢迎- 07-15采用Oracle OSB总线进行服务注册和接入
- 07-15javaEE 新闻管理系统 oracle11+tomcat6
- 07-15从Oracle演进看数据库技术的发展(oracle数据库发展史)
- 07-15如何升级oracle数据库安全补丁(oraclepsu补丁升级)
- 07-15【权威发布】关于Oracle WebLogic Server未授权远程代码执行高危漏洞的预警通报
- 07-15【mykit-data】 数据库同步工具(数据库表同步工具)
- 07-15[Java速成] 数据库基础,Connector/J、JDBC、JPA的关系(day 7)
- 07-15Google前工程主管“入住”Oracle(google浏览器找不到以前的书签)
- 最近发表
-
- 采用Oracle OSB总线进行服务注册和接入
- javaEE 新闻管理系统 oracle11+tomcat6
- 从Oracle演进看数据库技术的发展(oracle数据库发展史)
- 如何升级oracle数据库安全补丁(oraclepsu补丁升级)
- 【权威发布】关于Oracle WebLogic Server未授权远程代码执行高危漏洞的预警通报
- 【mykit-data】 数据库同步工具(数据库表同步工具)
- [Java速成] 数据库基础,Connector/J、JDBC、JPA的关系(day 7)
- Google前工程主管“入住”Oracle(google浏览器找不到以前的书签)
- Oracle数据库云服务系列新增前所未有的企业级功能
- 直播预告丨如何实现Oracle存储过程到java的一键转化
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)