位运算java_Java中的位运算

Java中的位运算,说实话,工作了两年的时间里,从来没有用过一次,因为平时都是些的是业务代码,很少接触比较底层的东西,我记得第一次在代码中看到还是在HashMap的Hash算法中看到的,这次重拾Java基础,着重理解了一下Java中的位运算,计算机中的运算一般都是操作反码进行运算,操作完成之后,再将结果的反码转化成原码,然后将二进制的结果转化成十进制输出出来,其实乘法和除法运算在计算机中都是通过位运算进行的,所以我觉得这部分应该好好整理一下,以下内容都是传智播客的Java基础中的讲解视频还有一些是讲解的课件、笔记中的内容,在此声明。

运算符

运算

位运算符的细节

<<

左移

空位补0,被移除的高位丢失

>>

右移

被移位的二进制最高位是0,右移后,空缺位补0,最高位是1,最高位补1

>>>

无符号右移

被移位二进制无论是0或者1,空缺位都是用0补

&

与运算

任何二进制位和0进行&运算,结果都是0,和1进行&运算,都是原值

|

或运算

任何二进制位和0进行|运算,结果都是原值,和1进行|运算,都是1

^

异或运算

任何相同二进制位进行^运算,结果都是0,不同二进制位进行^运算,结果都是1

~

反码

注意:

<

>>:右移稍微复杂一点,如果最高位是0,左边被移空的位就填入0,如果高位是1,左边被移空的位就填入1,相当于除以2的倍数

>>>:无论最高位是1还是0,左边被移空的高位都填入0

Java中运算符的优先级:(图片来源网路)

78929861fe2c3dc9541ff45d619d660f.png

代码演示各种位运算:

1 /*

2 要做位运算,首先要把数据转换为二进制。3 */

4 public static voidmain(String[] args) {5 //&,|,^,~

6 int a = 3;7 int b = 4;8

9 System.out.println(3 & 4);10 System.out.println(3 | 4);11 System.out.println(3 ^ 4);12 System.out.println(~3);13

14 }

代码分析解读:

分析:因为是位运算,所以我们必须先把数据换算成二进制。

3的二进制:11

00000000 00000000 00000000 00000011

4的二进制:100

00000000 00000000 00000000 00000100

&位与运算:有0则0。

00000000 00000000 00000000 00000011

&00000000 00000000 00000000 00000100

-----------------------------------

00000000 00000000 00000000 00000000

结果是:0

|位或运算:有1则1。

00000000 00000000 00000000 00000011

|00000000 00000000 00000000 00000100

-----------------------------------

00000000 00000000 00000000 00000111

结果是:7

^位异或运算:相同则0,不同则1。

00000000 00000000 00000000 00000011

&00000000 00000000 00000000 00000100

-----------------------------------

00000000 00000000 00000000 00000111

结果是:7

~按位取反运算符:0变1,1变0

00000000 00000000 00000000 00000011

~11111111 11111111 11111111 11111100 (补码)

补码:11111111 11111111 11111111 11111100

反码:11111111 11111111 11111111 11111011

原码:10000000 00000000 00000000 00000100

结果是:-4

^异或运算的特点:

1 /*

2 ^的特点:一个数据对另一个数据位异或两次,该数本身不变。3 */

4 public static voidmain(String[] args) {5 int a = 10;6 int b = 20;7

8 System.out.println(a ^ b ^ b); //10

9 System.out.println(a ^ b ^ a); //20

10 }

1 /*

2 <<:>>:右移 最高位是0,左边补齐0;最高为是1,左边补齐14 >>>:无符号右移 无论最高位是0还是1,左边补齐05

6 面试题:7 请用最有效率的方式写出计算2乘以8的结果?8 2 * 89 2 << 310 */

11 public static voidmain(String[] args) {12 //<< 把<

13 System.out.println(3 << 2); //3*2^2 = 3*4 = 12;14

15 //>> 把>>左边的数据除以2的移动次幂

16 System.out.println(24 >> 2); //24 / 2^2 = 24 / 4 = 6

17 System.out.println(24 >>> 2);18

19 System.out.println(-24 >> 2);20 System.out.println(-24 >>> 2);21 }

代码分析解读(32位):

计算出3的二进制:11

00000000 00000000 00000000 00000011

(00)000000 00000000 00000000 0000001100

>>(右移)的移动:

计算出-24的二进制:11000

原码:10000000 00000000 00000000 00011000

反码:11111111 11111111 11111111 11100111

补码:11111111 11111111 11111111 11101000

11111111 11111111 11111111 11101000

1111111111 11111111 11111111 111010(00) 补码

补码:1111111111 11111111 11111111 111010

反码:1111111111 11111111 11111111 111001

原码:1000000000 00000000 00000000 000110

结果:-6

>>>(无符号右移)的移动:

计算出-24的二进制:11000

原码:10000000 00000000 00000000 00011000

反码:11111111 11111111 11111111 11100111

补码:11111111 11111111 11111111 11101000

11111111 11111111 11111111 11101000

0011111111 11111111 11111111 111010(00)

结果:1073741818

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

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

相关文章

java蓝桥杯dfs_第七届 蓝桥杯决赛 Java B组 打靶 解题报告(DFS,回溯,全排列)-Go语言中文社区...

题目&#xff1a;打靶小明参加X星球的打靶比赛。比赛使用电子感应计分系统。其中有一局&#xff0c;小明得了96分。这局小明共打了6发子弹&#xff0c;没有脱靶。但望远镜看过去&#xff0c;只有3个弹孔。显然&#xff0c;有些子弹准确地穿过了前边的弹孔。不同环数得分是这样设…

java 高级泛型_java泛型的高级应用

展开全部在上面的例子中&#xff0c;由于没有限制class GenericsFoo类型持有者T的范围&#xff0c;实际上这里32313133353236313431303231363533e59b9ee7ad9431333339666666的限定类型相当于Object&#xff0c;这和“Object泛型”实质是一样的。限制比如我们要限制T为集合接口类…

java正则表达式 问号_正则表达式问号的四种用法详解

正则表达式问号的四种用法详解原文符号因为?在正则表达式中有特殊的含义&#xff0c;所以如果想匹配?本身&#xff0c;则需要转义&#xff0c;\?有无量词问号可以表示重复前面内容的0次或一次&#xff0c;也就是要么不出现&#xff0c;要么出现一次。非贪婪匹配贪婪匹配在满…

mysql+百万+中间表_MYSQL优化

MYSQL优化是一个非常大的课题&#xff0c;这篇文章主要介绍了跟MYSQL相关的4个方面&#xff0c;如果想深入研究可以查下相关资料。一、服务器级别优化二、操作系统级别优化三、MYSQL级别优化四、SQL级别优化一、服务器级别优化1.服务器选型SUN小型机、DELL730xd、HPDL380、IBM3…

java 拦截器ajax_(转)拦截器深入实践 - JAVA XML JAVASCRIPT AJAX CSS - BlogJava

Interceptor的定义我们来看一下Interceptor的接口的定义&#xff1a;Java代码 publicinterfaceInterceptorextendsSerializable {/*** Called to let an interceptor clean up any resources it has allocated.*/voiddestroy();/*** Called after an interceptor is created, b…

java判断有没有修改,java字节码判断对象应用是否被修改

原创1 背景在学习并发的时候看到了ConcurrentLinkedQueue队列的源码&#xff0c;刚开始的时候是看网上的帖子&#xff0c;然后就到IDE里边看源码&#xff0c;发现offer()方法在1.7版的时候有过修改。楼主的问题不是整个方法&#xff0c;而是其中的一截代码“(t ! (t tail))”&…

php接口 含义,php晋级必备:一文读懂php接口特点和使用!

PHP接口与类是什么关系&#xff1f;前面提到了php中抽象类和抽象方法&#xff0c;今天给大家谈谈php中接口技术。在PHP中每个类只能继承一个父类&#xff0c;如果声明的新类继承了抽象类实现了以后&#xff0c;这个新类就不能有其它的父类了。但是在实际中需要继承多个类实现功…

php获取不重复的随机数字,php如何生成不重复的随机数字

【摘要】PHP即“超文本预处理器”&#xff0c;是一种通用开源脚本语言。PHP是在服务器端执行的脚本语言&#xff0c;与C语言类似&#xff0c;是常用的网站编程语言。PHP独特的语法混合了C、Java、Perl以及 PHP 自创的语法。下面是php如何生成不重复的随机数字&#xff0c;让我们…

php header什么意思,php header是什么意思

header函数在PHP中是发送一些头部信息的, 我们可以直接使用它来做301跳转等&#xff0c;下面我来总结关于header函数用法与一些常用见问题解决方法。发送一个原始 HTTP 标头[Http Header]到客户端。标头 (header) 是服务器以 HTTP 协义传 HTML 资料到浏览器前所送出的字串&…

matlab dct稀疏系数,Matlab DCT详解

转自&#xff1a;http://blog.csdn.net/ahafg/article/details/48808443DCT变换DCT又称离散余弦变换&#xff0c;是一种块变换方式&#xff0c;只使用余弦函数来表达信号&#xff0c;与傅里叶变换紧密相关。常用于图像数据的压缩&#xff0c;通过将图像分成大小相等(一般为8*8)…

matlab验潮站,验潮站的作用是什么

验潮站的作用是什么?验潮站的建成投入使用&#xff0c;可实时观测沿海潮汐等观测要素&#xff0c;为潮汐预报、赤潮的发生、风暴潮预警报、海啸预警及海平面变化提供基础数据保障以及预测&#xff0c;同时为科学开发海洋提供有力的支持&#xff0c;为海洋经济健康发展保驾护航…

php收购,php中文网收购全国用户量最大的phpstudy集成开发环境揭秘

phpstudy介绍2008年第一个版本诞生&#xff0c;至今已有&#xff19;年,该程序包集成最新的ApachePHPMySQLphpMyAdminZendOptimizer,一次性安装,无须配置即可使用,是非常方便、好用的PHP调试环境.该程序不仅包括PHP调试环境,还包括了开发工具、开发手册等.总之学习PHP只需一个包…

oracle lob值是什么,关于Oracle数据库LOB大字段总结

概述在ORACLE数据库中&#xff0c;DBA_OBJECTS视图中OBJECT_TYPE为LOB的对象是什么东西呢&#xff1f;其实OBJECT_TYPE为LOB就是大对象(LOB)&#xff0c;它指那些用来存储大量数据的数据库字段。Oracle 11gR2 文档&#xff1a;http://download.oracle.com/docs/cd/E11882_01/Ap…

Oracle19C的dbhome,Windows server 安装Oracle19c (WINDOWS.X64_193000_db_home.zip) 过程碰到的问题总结...

Oracle19c的下载地址&#xff1a;链接: https://pan.baidu.com/s/1snqyViOAoeffAztPes_Tvw提取码: 9kb6Oracle19c的安装过程&#xff1a;解压缩安装包&#xff1a;解压结果 以管理员方式运行setup开始安装 一直默认走到安装完成即可创建用户cmd执行sqlplus命令&#xff0c;输入…

oracle数据库配置管理,Oracle配置管理

一、连接Oracle1、Oracle建立连接的过程无论是通过sqlplus命令连接还是第三方工具远程连接到Oracle&#xff0c;都需要建立客户端与服务端之间的连接。Oracle Net Service组件就是为了用于建立连接的&#xff0c;这个组件在安装Oracle时已经安装。1)在服务器端有一个listener监…

linux内核 默认路由表,[Linux] linux路由表-Go语言中文社区

路由表用于决定数据包从哪个网口发出&#xff0c;其主要判断依据是目标IP地址Linux路由表其实有2个主要概念&#xff1a;按顺序走路由策略,在路由策略对应的路由表中匹配规则路由策略(rule)路由表(table)查看所有的路由策略,32766那个策略最有用,对应的main路由表也是默认展示的…

linux添加源地址ping,实战经验:Linux Source NAT在Ping场景下的应用

原标题&#xff1a;实战经验&#xff1a;Linux Source NAT在Ping场景下的应用有时候&#xff0c;有这样的一种需求&#xff1a;需要修改IP数据包中的源地址&#xff0c;比如&#xff0c;从某一个主机发送Ping包到另一个主机&#xff0c;需要修改源地址为另一个源(通常&#xff…

Linux升级glibc版本汉字乱码,Linux CentOS6升级glibc库过程

CentOS6升级glibc库过程hadoop无法加载native库&#xff0c;可能原因是 glibc库版本过低&#xff0c;需要升级。第一&#xff1a;安装以下软件yum -y install zlib zlib-devel gcc gcc-c libtool openssl openssl-devel automake autoconf libtool pcre*第二、查看系统glibc版本…

linux图形界面 革命,Windows 95带来的革命

CDECDE1993年6月-在“公用桌面环境“是与Sun&#xff0c;惠普&#xff0c;IBM和合资Unix系统实验室。CDE&#xff0c;通用桌面环境(CommonDesktopEnvironment)的缩写。CDE是一种运行于UNIX&#xff0c;基于Motif部件工具箱开发的商业桌面环境。惠普的OpenVMS采用CDE作为标准的桌…

real time linux pdf,【整理】ubuntu real time Linux

ubuntu real timeUbuntu不支持实时可参考看看如何才能支持想要自己编译实时内核的话参考去&#xff1a;下载&#xff1a;The Real Time Preempt Patch然后自己编译即可。对于实时系统所支持的功能和特性以及平台&#xff0c;详见这里提供了 已编译好的实时的Debian相关内容或参…