位运算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;有些子弹准确地穿过了前边的弹孔。不同环数得分是这样设…

guid mysql_关于MySQL:MySQL-如何搜索GUID

我正在使用第三方.NET库(Rhino Security)&#xff0c;将其标识符存储为mysql数据库中binary(16)字段中的向导。 一切都可以从该应用程序完美地工作&#xff0c;但是当我尝试通过查询编辑器(对于MySQL为TOAD)手动运行查询时&#xff0c;没有行返回我知道存在的标识符。 例如&…

java 单例 生命周期_Rhythmk 一步一步学 JAVA (13) Spring-2 之Ben懒加载以及生命周期,单例...

1、定义Demo类&#xff1a;package com.rhythmk.spring;public class User {public void Init (){System.out.println("User 对象被 创建&#xff01;");}// 计数器public int Count0;public void Say(){this.Count;System.out.println("User 被"this.Coun…

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

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

java窗体线条切换消失_java – 如何更改apache poi生成的图表不使用平滑线条并将空单元格显示为间隙?...

我使用的是POI 3.12-beta1,并且代码可以在图例中创建包含多个数据集和命名系列的折线图.但是,poi中折线图的默认设置会生成一条已在数据点上平滑的线.空值也被绘制为0,但我们希望这些线在第一列停止,其中有一个空单元格.一旦在xlsx文件中呈现并更改这些设置,我就可以进入图表属…

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

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

java alert跳页面_JavaScript中通过提示框跳转页面的方法

通过提示框跳转页面具体代码如下所示&#xff1a;Documentwindow.onload function(){ //设置当页面加载时执行var btn document.getElementsByTagName("button")[] //获取btn元素btn.onclick function(){ //给button加上一个点击事件var answer confirm("是否…

java jsp if else if_jsp页面使用if else语句 | 学步园

jsp页面嵌入java语句使用即可,但是在使用if else语句时一定要注意使用是标点的使用,在语句中分号不能写,不符合jsp页面的语法规则,若多写了则会报错:如下:{name: priceRA, type: string}, {name: priceRB, type: string}, {name: priceRC, type: string},{name: priceRD, typ…

mysql 优化300例_mysql的limit优化实例

测试环境操作系统: debian linux服务器版本: Mysql 5.0.24Mysql数据库的Qcache缓存关闭数据库表testtable的参数:类型: MyISAM 大小: >80MB 记录规模: >50000 字段数: >25个字段id是主键 leibie字段上建有索引进行数据分段测试1>SQL不带where条件的测试1…

mysql+百万+中间表_MYSQL优化

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

java kafka 拉取_java获取kafka consumer lag

maven依赖org.apache.kafkakafka-clients0.10.1.0注意&#xff1a;kafka-clients版本需要0.10.1.0以上&#xff0c;因为调用了新增接口endOffsets;laglogsize-offsetlogsize通过consumer的endOffsets接口获得&#xff1b;offset通过consumer的committed接口获得&#xff1b;imp…

java开源图像处理ku_83 项开源视觉 SLAM 方案够你用了吗?

原标题&#xff1a;83 项开源视觉 SLAM 方案够你用了吗&#xff1f;公众号&#xff1a;3D视觉工坊主要关注&#xff1a;3D视觉算法、SLAM、vSLAM、计算机视觉、深度学习、自动驾驶、图像处理以及技术干货分享运营者和嘉宾介绍&#xff1a;运营者来自国内一线大厂的算法工程师&a…

java 方法的拆分_java – 字符串拆分和比较 – 最快的方法

>将输入读入byte []数组以将指针保持在代码的一侧.>逐字节读取,计算整数元素&#xff1a;int b inputBytes[p];int d b - 0;if (0 < d) {if (d < 9) {element element * 10 d;} else {// b :}} else {// b ,// add element to the hash; element 0;...}if (…

java sql异常_java.sql.SQLException: Io 异常: Got minus one from a

java.sql.SQLException: Io 异常: Got minus one from a read callat oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:111)at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:145)at oracle.jdbc.driver.DatabaseError.thro…

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…

php学的是什么意思_为什么要学习PHP?到底什么是PHP?

为什么要学习PHP?到底什么是PHP?PHP可以做什么?相信这样的问题困扰着很多的人&#xff0c;在我没工作之前&#xff0c;都没有听说过PHP&#xff0c;自从工作后&#xff0c;慢慢接触到代码&#xff0c;慢慢知道什么是PHP。PHP是做网站一种语言&#xff0c;很多工程师都使用PH…

php 多数据库联合查询,php如何同时连接多个数据库_PHP教程

下面是一个函数能够保证连接多个数据库的下不同的表的函数&#xff0c;可以收藏一下&#xff0c;比较实用&#xff0c;测试过是有用的。function mysql_oper($oper,$db,$table,$where1,$limit10){$connmysql_connect(localhost,like,admin,true) or mysql_error();mysql_select…

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;让我们…