java 负数 位移运算_Java中的位移运算

在Java中,位移运算属于基本运算,符号是<>,即向左位移和向右位移。在Java中只有整数才能位移,所以其他的不考虑,位移运算是将整数在内存中表示的二进制进行位移,所以在Java中分为正数和负数的位移。

对于正数来说,向左位移,即<>相当于除以2,注意是整数除以整数。例如 5 >> 1 即5/2=2。

下面举例说明:

5<<1,我们以int为例:

数字5

int型的二进制表示为: 0000 0000 0000 0000 0000 0000 0000 0101

向左移1位即: 0000 0000 0000 0000 0000 0000 0000 1010 (后位补0)

所以结果为:数字10

5>>1,我们以int为例:

数字5

int型的二进制表示为: 0000 0000 0000 0000 0000 0000 0000 0101

向右移1位即: 0000 0000 0000 0000 0000 0000 0000 0010 (高位补0)

所以结果为:数字2

所以对于正数,可以随意使用位移,与乘除几乎没有结果的区别,而且性能更优。

而对于负数来说,Java中的位移应该谨慎使用,因为位移运算在Java中称为带符号的位移。那么到底带符号的位移是如何计算的呢,下面直接举例说明:

-5<<1,我们以int为例,由于负数在内存是以补码存在,请看:

数字-5

int型的二进制原码表示为: 1000 0000 0000 0000 0000 0000 0000 0101

而其反码为:1111 1111 1111 1111 1111 1111 1111 1010

补码为:1111 1111 1111 1111 1111 1111 1111 1011

向左移1位即结果为:1111 1111 1111 1111 1111 1111 1111 0110 (后位补0)

将结果计算反码为:1111 1111 1111 1111 1111 1111 1111 0101

将结果计算原码为:1000 0000 0000 0000 0000 0000 0000 1010

所以结果为:数字-10

看起来好像还是乘以2,但是换个数字来试试:

例如数字的二进制如果为:1110 0000 0000 0000 0000 0000 0000 0001

而其反码为:1001 1111 1111 1111 1111 1111 1111 1110

补码为:1001 1111 1111 1111 1111 1111 1111 1111

向左移1位即结果为:0011 1111 1111 1111 1111 1111 1111 1110

这个结果的最高位是0,所以必然是个正数,所以结果并非想象的乘以2。

如果是右移,那么高位会补1,结果一样不算正常,例如:

-5>>1,我们以int为例,由于负数在内存是以补码存在,请看:

数字-5

int型的二进制原码表示为: 1000 0000 0000 0000 0000 0000 0000 0101

而其反码为:1111 1111 1111 1111 1111 1111 1111 1010

补码为:1111 1111 1111 1111 1111 1111 1111 1011

向右移1位即结果为:1111 1111 1111 1111 1111 1111 1111 1101 (高位补1)

将结果计算反码为:1111 1111 1111 1111 1111 1111 1111 1100

将结果计算原码为:1000 0000 0000 0000 0000 0000 0000 0011

所以结果为:数字-3

而在Java中,-5除以2应该结果为-2,但是位移却为-3。

另外,如果是下面的例子:

-1>>1,我们以int为例,由于负数在内存是以补码存在,请看:

数字-1

int型的二进制原码表示为: 1000 0000 0000 0000 0000 0000 0000 0001

而其反码为:1111 1111 1111 1111 1111 1111 1111 1110

补码为:1111 1111 1111 1111 1111 1111 1111 1111

向右移1位即结果为:1111 1111 1111 1111 1111 1111 1111 1111 (高位补1)

所以结果不用慢慢算就知道为:数字-1

所以对于-1来说,无论怎么右移,结果还是-1,而如果是除以2,结果是0。

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

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

相关文章

Alibaba之MySQL宝典_阿里巴巴内部 MySQL宝典 意外流出!极致经典,堪称数据库的天花板...

MySQL 是一个关系型数据库&#xff0c;使用 SQL 语言进行增删改查操作&#xff0c;目前属于 Oracle 旗下的产品。MySQL 数据库开源免费&#xff0c;能够跨平台&#xff0c;支持分布式&#xff0c;性能也不错&#xff0c;可以和 PHP、Java 等 Web 开发语言完美配合&#xff0c;非…

Java 哪些事最困扰你?

相信在学Java编程的小伙伴都会遇到很多的问题&#xff0c;特别是当我们写完程序的时候突然报个错&#xff0c;然后找了半天&#xff0c;却没发现哪里报错了&#xff0c;“我在哪”&#xff0c;“我在干什么”&#xff0c;“我写了什么”“怎么会这样”,会很爆炸的心态&#xff…

java数组 arraylist_JAVA 用数组实现 ArrayList

我们知道 ArrayList 是一个集合&#xff0c;它能存放各种不同类型的数据&#xff0c;而且其容量是自动增长的。那么它是怎么实现的呢&#xff1f;其实 ArrayList 的底层是用 数组实现的。我们查看 JDK 源码也可以发现。而用数组实现集合的原理有两点&#xff1a;1、能自动扩容2…

java sha1加密ascii码_如何使用加密芯片完成SHA1摘要运算

1. 测试目标使用LKT系列加密芯片进行SHA1摘要运算并使用openssl验证正确性2. 测试环境本示例LKT加密芯片运行环境为windows系统、测试软件LCS KIT、LKT-K100开发板。Linux ubuntu 14.04系统、OpenSSL 1.0.1f 6 Jan 2014。3. 测试步骤注意&#xff1a;“->”表示使用LCS KIT软…

这些Java基础面试知识点,你都掌握了吗?

想了解一下学Java的小伙伴们&#xff0c;在学习Java的时候有没有去总结知识点&#xff0c;哪些知识点我们没有掌握&#xff0c;哪些知识点是我们还没有掌握的&#xff0c;今天小编来发掘一些Java基础面试知识点&#xff0c;不知道大家掌握没有。 小编分享的一些知识点&#xf…

mysql怎么获取系统_MySQL获取系统性能和状态代码

代码如下:#!/bin/kshINTERVAL5PREFIX$INTERVAL-sec-statustouch /tmp/runningRUNFILE/tmp/runningmy -e show global variables >> mysql-variableswhile test -e $RUNFILE; dofile$(date %F_%I)sleep$(date %s.%N | awk "{print $INTERVAL - (\$1 % $INTERVAL)}&qu…

学习Java的几大难题,你们都解决了吗?

Java很难学&#xff0c;遇到很多问题&#xff0c;刚学的小伙伴多多少少还是有一些抱怨的&#xff0c;但是这都不是事&#xff0c;只要下定决心&#xff0c;我们就一定可以&#xff01;下面小编来分享一下学习Java的一些难题。 一、面向对象的历史演变 搞清楚面向对象的历史演…

python中编函数_在python中编写函数

Aaron Hall..10递归实现这是一个相当优雅的递归实现,为了清晰起见,它使用了Python 3的功能:def strict_compose(*funcs):*funcs, penultimate, last funcsif funcs:penultimate strict_compose(*funcs, penultimate)return lambda *args, **kwargs: penultimate(last(*args, …

零基础学Java的朋友值得一看

Java这门编程语言虽然入门比较简单&#xff0c;但是要想学好它&#xff0c;并非一日之寒。很多人开始学习Java时候会被突如其来的概念定义搞的晕头转向。类、对象、接口、构造函数、方法、继承、多态、各种修饰符等概念扑面而来的时候&#xff0c;脑子里顿时变成了一片浆糊&…

deflater java_java.util.zip 类 Deflater - Java 中文参考手册

java.lang.Objectjava.util.zip.Deflaterpublic class Deflaterextends Object此类使用流行的 ZLIB 压缩程序库为通用压缩提供支持。ZLIB 压缩程序库最初是作为 PNG 图形标准的一部分开发的&#xff0c;不受专利的保护。有关该规范的完整描述&#xff0c;请参见 java.util.zip …

Java程序员的自我修养?

论Java程序员的自我修养&#xff0c;相信很多人一开始都觉得软件以后会前程似锦&#xff0c;可以一展才华&#xff0c;每一个参加Java软件开发培训班或者自学Java编程的学员都相信Java的发展前景&#xff0c;对于零基础学员而言自学Java软件开会有很大的难度&#xff0c;但是只…

gdal java api_Java使用GDAL库

GDAL(Geospatial Data Abstraction Library)是一个在X/MIT许可协议下的开源栅格空间数据转换库。它利用抽象数据模型来表达所支持的各种文件格式。它还有一系列命令行工具来进行数据转换和处理。GDAL官方网址&#xff1a;http://www.gdal.org/&#xff0c;它能支持当前流行的各…

java reflectionutils_Spring中的各种Utils(五):ReflectionUtils详解(转载)

原文出处&#xff1a;https://blog.csdn.net/wolfcode_cn/article/details/80660515原创文章&#xff0c;转载请注明出处。本节中&#xff0c;我们来看看Spring针对反射提供的工具类&#xff1a;ReflectionUtils。反射在容器中使用是非常频繁的了&#xff0c;ReflectionUtils中…

Java有快速打好基础的方法?

对于初学者而言&#xff0c;不要妄想在短时间内快速掌握Java的全部内容&#xff0c;一开始打好基础很重要&#xff0c;而且越大的公司&#xff0c;越注重考察你对基础的深入理解。 一、Java基础知识包括&#xff1a; Java基础(Java面向对象&#xff0c;常用基础类&#xff0c…

Java的一些学习心得

俗话说的好&#xff0c;勤能补拙。这话放到Java学习中非常适用&#xff0c;众所周知&#xff0c;专业的培训都是高强度的培训&#xff0c;想要吸收一天的学习内容也并非容易&#xff0c;但是确实有人可以做到。是谁&#xff1f;勤奋的人&#xff01;勤奋的人可以利用课下时间梳…

java企业人事管理系统源码_企业人事管理系统完美版源代码 - 源码下载|行业应用软件|企业管理(财务/ERP/EIP等)|源代码 - 源码中国...

企业人事管理系统完美版源代码............................\DataEnvironment.DCA............................\DataEnvironment.Dsr............................\DataEnvironment.OBJ............................\DataReMove.DCA............................\DataReMove.D…

自学Java编程要做好哪些准备?

Java编程可谓是经得起时间的考验&#xff0c;时隔20多年&#xff0c;依然没有淘汰&#xff0c;那如果我们自学Java需要做哪些准备呢&#xff1f;小编今天就来分析一下。 学习Java编程这个事情&#xff0c;最重要的还是靠自己来学习的&#xff0c;Java培训只是给自己一个成为Ja…

java substring 越界_我在java中用substrng()提取某一字符串的子串是老是出现越界的问题,求指教~~~...

下述程序是为了提取文本域中的文本&#xff0c;并写入一个文件(写入时要和文本框中的格式一样&#xff0c;即也要有换行)inti0;JFileChooserfcnewJFileChooser();fc.showSaveDialog(null);Filefilefc....下述程序是为了提取文本域中的文本&#xff0c;并写入一个文件(写入时要和…

Java程序员需要了解的两种服务器设计模型

我们在IO模型和Java网络编程模型中&#xff0c;对IO有了一定的理解。这一篇&#xff0c;主要讲解基于事件驱动的两种是在原来基础上的扩展。在基于事件驱动的网络编程模型中&#xff0c;Reactor和Proactor模型是两种常用的IO设计模型。 我们知道BIO&#xff08;阻塞IO&#xf…

java在线网页客服聊天_管理员消息java 网站用户在线和客服聊天

首先声明&#xff0c;我是一个菜鸟。一下文章中出现技术误导情况盖不负责这是应用到项目中的一个例子。实现原理是将信息存储到Application域里面。然后应用Struts2 Action 用json格式的数据停止前后台交互。截图&#xff1a;前台用户界面&#xff1a;后台客服界面&#xff1a;…