Java位运算—高级用法与深入解读

正数的反码是其本身

负数的反码是在其原码的基础上, 符号位不变,其余各个位取反.

[+5]=[00000101](原码)= [00000101](反码)

[ - 5]=[10000101](原码)= [11111010](反码)

5.补码

在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理。补码的表示方法是:

正数的补码就是其本身

负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)

[+5]=[00000101](原码)= [00000101](反码)=[00000101](补码)

[ - 5]=[10000101](原码)= [11111010](反码)=[11111011](补码)

6.补充

计算机中的符号数有三种表示方法,即原码、反码和补码。三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,而数值位,三种表示方法各不相同。而在计算机系统中,数值一律用补码来表示和存储。

三、Java位运算


位移操作:(只针对 int类型的数据有效,java中,一个int的长度始终是32位,也就是4个字节,它操作的都是该整数的二进制数).也可作用于以下类型,即 byte,short,char,long(它们都是整数形式)。当为这四种类型时,JVM先把它们转换成int型再进行操作。

7.左移(<<)

m<<n的含义:把整数m表示的二进制数左移n位,高位移出n位都舍弃,低位补0. (此时将会出现正数变成负数的可能),如下实例:

5<<2 :把十进制的数值5左移两位,按如下步骤计算,

把5转位16位的二进制机器数:00000000 00000000 00000000 00000101

按左移原理,将二进制数左移两位:00000000 00000000 00000000 00010100

左移后结果为20

5<<29:把十进制的数值5左移29位,按如下步骤计算,

把5转位16位的二进制机器数:00000000 00000000 00000000 00000101

按左移原理,将二进制数左移29位:10100000 00000000 00000000 00000000

左移后高位是1,结果显然是负数

小结:m<<n即在数字没有溢出的前提下,对于正数和负数,左移n位都相当于m乘以2的n次方.

8.右移(>>)

m>>n的含义:把整数m表示的二进制数右移n位,m为正数,高位全部补0;m为负数,高位全部补1,实例如下:

5>>2 :把十进制的数值5右移两位,按如下步骤计算,

把5转位16位的二进制机器数:00000000 00000000 00000000 00000101

按右移原理,将二进制数左移两位:00000000 00000000 00000000 00000001

右移后结果为1

-5>>2:把十进制的数值-5右移两位,按如下步骤计算,

把-5转位16位的二进制机器数:11111111 11111111 11111111 11111011

按右移原理,将二进制数右移两位:11111111 11111111 11111111 11111110

右移后结果为-2

小结: m>>n即相当于m除以2的n次方,得到的为整数时,即为结果。如果结果为小数,此时会出现两种情况:

如果m为正数,得到的商会无条件 的舍弃小数位;

如果m为负数,舍弃小数部分,然后把整数部分加+1得到位移后的值。

9.无符号右移(>>>)

m>>>n:整数m表示的二进制右移n位,不论正负数,高位都补0,实例如下:

5>>>2 :把十进制的数值5右移两位,按如下步骤计算,

把5转位16位的二进制机器数:00000000 00000000 00000000 00000101

按右移原理,将二进制数左移两位:00000000 00000000 00000000 00000001

右移后结果为1

-5>>>2:把十进制的数值-5右移两位,按如下步骤计算,

把-5转位16位的二进制机器数:11111111 11111111 11111111 11111011

按右移原理,将二进制数右移两位:00111111 11111111 11111111 11111110

右移后结果为正数

10.按位非操作(~)

~ 按位取反操作符,对每个二进制位的内容求反,即1变成0,0变成1实例如下

把-5转位16位的二进制机器数:11111111 11111111 11111111 11111011

~(-5) 取反结果:00000000 00000000 00000000 00000100

转为十进制,结果为4

11.按位与操作(&)

& 位与操作符,对应的二进制位进行与操作,两个都为1才为1,其他情况均为0,原理如下:

1&0=0

0&0=0

1&1=1

0&1=0

实例:-5 & 4

-5的二进制形式为: 11111111 11111111 11111111 11111011

4的二进制形式为: 00000000 00000000 00000000 00000100

——————————————————————————————

逻辑与运算结果: 00000000 00000000 00000000 00000000

最终结果为0。

12.按位或操作(|)

| 位或操作符,对应的二进制位进行或操作,两个都为0才为0,其他情况均为1,原理如下:

1|0=1

0|0=0

1|1=1

0|1=1

实例:-5 | 4

-5的二进制形式为:11111111 11111111 11111111 11111011

4的二进制形式为:00000000 00000000 00000000 00000100

————————————————————————————

逻辑或运算结果: 11111111 11111111 11111111 11111111

最终结果为-1。

利用或的原理我们可以把字节转换为整数,-64&0xFF=192,其中0xFF表示整数255。

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后

由于文案过于长,在此就不一一介绍了,这份Java后端架构进阶笔记内容包括:Java集合,JVM、Java并发、微服务、SpringNetty与 RPC 、网络、日志 、Zookeeper 、Kafka 、RabbitMQ 、Hbase 、MongoDB、Cassandra 、Java基础、负载均衡、数据库、一致性算法、Java算法、数据结构、分布式缓存等等知识详解。

image

本知识体系适合于所有Java程序员学习,关于以上目录中的知识点都有详细的讲解及介绍,掌握该知识点的所有内容对你会有一个质的提升,其中也总结了很多面试过程中遇到的题目以及有对应的视频解析总结。

image

image

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
…(img-7B5StcwC-1712603424518)]

本知识体系适合于所有Java程序员学习,关于以上目录中的知识点都有详细的讲解及介绍,掌握该知识点的所有内容对你会有一个质的提升,其中也总结了很多面试过程中遇到的题目以及有对应的视频解析总结。

[外链图片转存中…(img-AEzyE3Ix-1712603424518)]

[外链图片转存中…(img-vBZrid7H-1712603424518)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 26
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值