java移位运算_Java移位运算符 “

article/2025/11/7 3:32:47

详解

首先举一个样例来说明不是循环移位:

假设上面的程序改为

i = 3L << 63

程序的结果仍然为

1000000000000000000000000000000000000000000000000000000000000000

那么就说明Java中的移位运算不是循环的。

那对上面的问题又怎么解释呢?

在JLS(Java Language Specific 15.19)中有例如以下解释:If the promoted type of the left-hand operand is int, only the five lowest-order bits of the right-hand operand are used as the shift distance. It is as if the right-hand operand were subjected to a bitwise logical AND operator & (§15.22.1) with the mask value 0x1f (0b11111). The shift distance actually used is therefore always in the range 0 to 31, inclusive.

If the promoted type of the left-hand operand is long, then only the six lowest-order bits of the right-hand operand are used as the shift distance. It is as if the right-hand operand were subjected to a bitwise logical AND operator & (§15.22.1) with the mask value 0x3f (0b111111). The shift distance actually used is therefore always in the range 0 to 63, inclusive.

意思是说:在移位运算中,假设被移位的操作数是int类型的,那么仅仅会用到移位数的最低5位,假设是long类型的,那么仅仅会用到低六位。

那么为什么是低5位和低6位呢?相信你应该明确了,int共占32位,long占64位,正好是2的5次幂和6次幂。能够理解为分别对32 和 64 取模。所以1L << 64 就会变成 1L << 0。结果自然就是1了。

关于网上的说法:

网上有很多资料说上述定义是由编译器完毕的,即假设写 1L << 64 。则编译器会将文件编译为  1L << 0 。可是经过本人的实验发现这个过程会发生在执行时而不是编译位class文件的过程。以下是个人所做的一些实验。

实验过程:

将程序编译为class文件

使用javap输出class文件的内容

使用HSDIS输出虚拟机执行的汇编代码

源程序:

public class SF{

public static void main(String[] args) {

new SF().sh(1,2);

}

public int sh(int a , int b){

return (a << 32);

}

}

注意此处使用的是int类型

在windows环境下的批处理文件

javac SF.java

javap -verbose SF > sfp.txt

java -XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly -Xcomp -XX:CompileCommand=dontinline,*SF.sh -XX:CompileCommand=compileonly,*SF.sh SF > sfasm.txt

pause

这里须要用到HSDIS插件才干输出汇编代码。

以下是javap的结果。

029ac0da6049acae66dbff1799d2e6be.png

iload_1 为取得參数a,在栈中push  32  后,进行移位操作。ishl中的i指代的是int的移位操作。

再看反汇编的输出:

[Verified Entry Point]

0x01c92e50: mov %eax,-0x4000(%esp)

0x01c92e57: push %ebp

0x01c92e58: sub $0x18,%esp ;*iload_1

; - SF::sh@0 (line 7)

0x01c92e5b: shl $0x0,%edx

0x01c92e5e: mov %edx,%eax

0x01c92e60: add $0x18,%esp

0x01c92e63: pop %ebp

0x01c92e64: test %eax,0x140100 ; {poll_return}

看到在分配完栈空间后,在0x01c92e5b这一行中,进行了移位。操作数为0x0


http://chatgpt.dhexx.cn/article/BTrOv343.shtml

相关文章

java中的移位操作详解

移位运算&#xff0c;这是一个陌生又熟悉的操作。陌生是指不易理解且不常用&#xff0c;熟悉是指“别人家的开发工程师”在代码中经常使用这种方式进行高低位的截取、哈希计算、乘除法的运算&#xff0c;今天&#xff0c;让我们一起来揭开移位运算的神秘面纱。 Java提供了两种…

html 右侧滑动条取消,滚动条可以设置取消吗?

网页中的滚动条可以取消&#xff0c;下面我们就来看一下隐藏网页中滚动条的方法&#xff1a; 1、使用以下CSS可以隐藏滚动条&#xff1a;.container::-webkit-scrollbar {display:none} 但是要兼容其他浏览器的话这个就不太好用了&#xff0c;这个适用于Chrome 2、为了兼容其他…

html网页设计滚动条怎么设置,css怎么设置滚动条?

在我们HTML页面中经常会用到滚动条来优化我们的HTML页面&#xff0c;那么我们该如何设置滚动条呢&#xff1f;下面我们来看一下使用css设置滚动条的方法。 一、我们可以使用overflow属性设置是否出现滚动条overflow:scroll /* x y 方向都会*/ 或者 overflow-x:scroll /*只是x方…

element的表格设置及滚动条的设置

element的Table 表格 1.通过使用elementUI中的表格&#xff0c;达到我们需要的效果&#xff0c;其中包括对滚动条的修改&#xff0c;以及文字颜色修改等… 2.先看效果&#xff0c;是可以滚动的 HTML <div class"content_table"><el-table :data"tab…

改变滚动条样式

在我们开发网页项目中往往会遇到滚动条&#xff0c;然而滚动条原本的样式太丑了&#xff0c;所以要改变滚动条的样式&#xff0c;让滚动条和我们开发的项目更加的美观更加的好看&#xff1b; 案例&#xff1a; <div style"width: 200px; height: 200px;overflow: aut…

网页中滚动条的设置和修改

一、通过css设置滚动条 在所有浏览器&#xff0c;滚动条可定制性最强的当属webkit内核的浏览器了。因为源代码开放的原因&#xff0c;市面上基于webkit内核的浏览器也是很难穷举完。例如有&#xff1a;Google Chrome、Opera&#xff08;opera最近宣布使用webkit内核了&#xf…

如何设置页面滚动条

:root {::-webkit-scrollbar {width: 7px;height: 5px;background: #fff;border-radius: 5px; /*外层轨道*/}::-webkit-scrollbar-thumb {display: block;width: 2px;margin: 0 auto;border-radius: 5px;background: #ccc; /*内层轨道*/transition: all .2s ease-in-out;} } 设…

设置滚动条样式

1.全局设置 ::-webkit-scrollbar {width: 4px;height: 4px; }::-webkit-scrollbar-thumb {border-radius: 5px;-webkit-box-shadow: inset 0 0 5px rgba(0,0,0,0.2);background-color: #99a9bf; }::-webkit-scrollbar-track {-webkit-box-shadow: inset 0 0 5px rgba(0,0,0,0.2…

div:给div加滚动条 div的滚动条设置

今天做了个例子&#xff1a; div 的滚动条问题&#xff1a; 两种方法&#xff1a; 一、 <div style" overflow:scroll; width:400px; height:400px;”></div> 记住宽和高一定要设置噢&#xff0c;否则不成的 不过在不超出时&#xff0c;会有下面的滚动条&…

浏览器滚动条css样式设置,看这一篇文章就够了!

一 前言 在CSS 中&#xff0c;如果我们在块级容器上设置了属性: overflow:scroll /* x y 方向都会*/ 或者 overflow-x:scroll /*只是x方向*/ 或者 overflow-y:scroll /*只是y方向*/当块级内容区域超出块级元素范围的时候&#xff0c;就会以滚动条的形式展示&#xff0c;你可…

滚动条如何设置样式和滚动条悬浮显示与隐藏

文章目录 一、滚动条如何设置样式1&#xff1a;滚动条的默认样式&#xff08;如下图&#xff09;1&#xff1a;html代码2&#xff1a;css代码3&#xff1a;效果图 2&#xff1a;CSS设置滚动条的属性&#xff08;重点&#xff09;3&#xff1a;设置滚动条的例子1&#xff1a;css…

web端百度离线地图3.0的制作使用

花了一天的时间查了好多资料&#xff0c;终于地图可以在web端离线访问了。 参考博客&#xff1a;添加链接描述 主要是参考上面博主的文章做好的&#xff0c;非常感谢 这是我做的一个demo&#xff0c;可以直接用。有需要的朋友可以参考&#xff1a; 链接&#xff1a;https://pan…

java百度地图离线开发_【“零起点”--百度地图手机SDK】如何使用离线地图?

摘要:用户使用地图的时候,希望不联网就能展示地图。这时,就需要使用到离线地图了。如何在百度地图SDK里引入离线地图呢? ------------------------------------------------------------------------------------------------------------------- 相关阅读: -------------…

计算机主机中包,百度地图脱机包最终可以在计算机上导入

百度地图终于面世了. 下载后&#xff0c;试用后感觉不错. 我喜欢离线地图功能 但是我不知道下载的人是否太多. 下载离线地图包的速度太慢. 但是捏了&#xff0c;兄弟尝试了导入方法&#xff0c;但是行得通百度地图包离线包&#xff0c;哇哈哈哈 但是&#xff0c;这需要将iPhone…

如何下载百度地图离线包并导入OruxMaps查看

一、什么是OruxMaps OruxMaps是一款支持本地离线地图包的地图应用&#xff0c;适合户外旅行&#xff0c;同时也支持加载OpenStreetMap在线地图&#xff0c;可以导入OZI格式并转换制作成自己的地图&#xff0c;它还可以记录、保存导入航迹、航点并统计相关信息并提供校准功能。…

百度地图离线js+瓦片地图

前言 网上有许多的文章都有教程但是缺少了瓦片地图下载这个最重要的东西。&#xff08;这篇博客主要是分享一下如何下载瓦片地图&#xff09; BMapDown 偶然搜索到BMapDown 这个工具可以在线下载瓦片地图。 下载地址&#xff08;非常谢谢开发者&#xff09; 下载下来之后发现还…

echarts + 离线百度地图 + 散点图配置

最近在做一个国网的一个项目&#xff0c;需要实现一些散点图的标注等&#xff1b;而且需要在内网使用&#xff0c;感觉使用 echarts 就可以简单的实现无需加载类似 openlayers &#xff0c;leaflet 等 webgis 框架然后再发布地图服务实现。 实现思路 : 百度地图API文件创建本…

百度地图api离线开发(示例源代码)

相关教程&#xff1a; 1、如何搭建WEB离线地图开发环境 2、下载离线地图数据(金字塔瓦片数据&#xff09; 3、离线地图二次开发接口&#xff08;离线地图API&#xff09; 4、离线地图API接口实例DEMO 5、离线地图完整演示实例 说明&#xff1a; 1. 当前版本支持 谷歌电子/卫星…

百度地图离线版

[Java] 地图瓦片下载器&#xff0c;支持百度、高德、谷歌地图的瓦片下载&#xff0c;内置三大厂家的js离线api [复制链接] 地图瓦片下载器&#xff0c;支持百度地图、高德地图、谷歌地图瓦片下载&#xff1b;另有百度地图、高德地图、谷歌地图API离线版支持百度、高德、谷歌…

百度地图离线开发2.0

目录 项目运行环境 在html中所有的元素都是可以选中的,在地图中也可以的,选中时整个地图会出现蓝色的选中效果,要去除这种现象可以使用下面样式设置 设置地图显示的最大、最小级别 设置地图显示范围,超出范围后自动回弹 移动地图,地图将自动从一个地方到拎另一个地方 缩放…