JVM字节码- long/double类型的比较

在 Java 虚拟机(JVM)字节码中,对于 doublelong 类型的比较,没有直接等价于 iflt(用于整型比较)这样的指令。相反,比较 doublelong 类型的值涉及到一些不同的步骤和指令。下面是如何在 JVM 字节码中进行这些类型的比较:

对于 double 类型的比较:

  1. 使用 dcmpgdcmpl 指令:这些指令用于比较栈顶的两个 double 值。dcmpg(double compare greater)和 dcmpl(double compare less)的差异在于它们处理 NaN(不是一个数字)的方式。如果涉及到 NaN,dcmpg 会返回 1,而 dcmpl 会返回 -1。

  2. 使用条件跳转指令:在执行了 dcmpgdcmpl 之后,栈顶会有一个整数值(-1、0 或 1),接着可以使用 ifeq(等于0时跳转)、ifne(不等于0时跳转)、iflt(小于0时跳转)、ifge(大于等于0时跳转)等指令来根据比较结果进行条件跳转。

对于 long 类型的比较:

  1. 使用 lcmp 指令lcmp 指令用于比较栈顶的两个 long 值。执行后,栈顶会被替换为整数值 -1、0 或 1,这取决于比较的结果(小于、等于或大于)。

  2. 使用条件跳转指令:与 double 类型类似,执行 lcmp 之后,可以使用 ifeqifneifltifge 等指令来根据比较结果进行条件跳转。

示例:

比较两个 double 值,如果第一个小于第二个,则跳转到标签 label

dload_1  // 加载第一个 double 值
dload_3  // 加载第二个 double 值
dcmpl    // 比较两个 double 值
iflt label // 如果第一个小于第二个,则跳转

比较两个 long 值,如果第一个大于等于第二个,则跳转到标签 label

lload_1  // 加载第一个 long 值
lload_3  // 加载第二个 long 值
lcmp     // 比较两个 long 值
ifge label // 如果第一个大于等于第二个,则跳转

这种方式允许 JVM 在不直接提供特定于每种数据类型的比较跳转指令的情况下,灵活地处理各种数据类型的比较操作。

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

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

相关文章

Node——Node.js基础

对Node.js中的基础知识进行讲解,包括全局变量、全局对象、全局函数以及用于实现模块化编程的exports和module对象等内容,这些知识是学习Node.js应用开发的基础。 1、Node.js全局对象 全局,即程序中任何地方都可以使用,Node.js内…

华为OD机试 - 分月饼(Java JS Python C)

题目描述 中秋节,公司分月饼,m 个员工,买了 n 个月饼,m ≤ n,每个员工至少分 1 个月饼,但可以分多个, 单人分到最多月饼的个数是 Max1 ,单人分到第二多月饼个数是 Max2 ,Max1 - Max2 ≤ 3 ,单人分到第 n - 1 多月饼个数是 Max(n-1),单人分到第n多月饼个数是 Max(n)…

【libGDX】加载G3DJ模型

1 前言 libGDX 提供了自己的 3D 格式模型文件,称为 G3D,包含 g3dj(Json 格式)和 g3db(Binary 格式)文件,官方介绍见 → importing-blender-models-in-libgdx。 对于 fbx 文件,libGDX…

python中的简单线性拟合

简单线性回归可以拟合线性关系的数据,一般使用一次函数或二次函数即可。 import numpy as np import matplotlib.pyplot as pltxnp.array([1,2,3,4,5,6,7,8,9,10]) ynp.array([2.5,4.5,4.8,5.5,6.0,7.0,7.8,8.0,9.0,10.0])#一次拟合函数 slope,interceptnp.polyfit…

大语言模型的好坏是由您提示水平高底决定的

大语言模型是有"嫌贫爱富“特点的,当你的水平高于大语言模型时它常常可以帮你,当你的水平低于大语言模型时它往往会骗你。 这主要是因为大语言模型在处理文本时具有较强的生成能力,可以根据已有的语境生成合乎逻辑的文本。当你的水平高于…

手机充电 显示连接耳机 (充电没外放声音) 并且充电速度很慢

现象 手机插入充电线充电 外放消失 按音量调节键 显示正在调节耳机音量 手机充电快充标识丢失 显示现在不是快充 充电速度很慢,边玩边用半小时不到2% 经测试:快充正常应该是20w,现在只有3w. 结论 排查后发现是数据线坏了,扔掉后随便换了根c2c的雷电线发现充电速度正常,不…

不受平台限制,Sketch 网页版震撼登场

Sketch 是一种基于 Mac 的矢量图形编辑器,可用于数字设计。其主要功能包括无损矢量编辑、完美像素精度和数百个插件同步功能,可导出预设和代码。它是目前流行的页面交互协作设计工具。但是 Sketch 最大的缺点是对 Windows/PC 用户不友好。严格来说&#…

使用 Java 来读取 Excel 文件,检查每一行中的 URL,并将不符合条件的行标记为红色

-- 日、时、分、秒,这是计时的单位,惜时就应该惜日、惜时、惜分、惜秒。 用 Java 来读取 Excel 文件,检查每一行中的 URL,并将不符合条件的行标记为红色。以下是一个简单的示例,使用 Apache POI 进行 Excel 操作&#…

从零开始学习typescript——流程控制

前言 默认情况下,所有的代码都是从上到下,从左到右顺序执行的。 #mermaid-svg-zf9e2mz73WPBbIzH {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-zf9e2mz73WPBbIzH .error-icon{fill:#552222…

vue3+ts v-model 深度学习

<template><div><h1>我是App.vue组件</h1><div>isShpw:{{ isShow }}</div><div>text:{{ text }}</div><div><button click"isShow !isShow">开关</button></div><hr /><vModeVal…

在Matlab里安装gurobipy怎么安装教程

在Matlab 里安装gurobipy 先在CMD里激活&#xff0c; 然后添加系统环境变量 GRB_LICENSE_FILEC:\gurobi10.2\gurobi.lic 然后输入 addpath(D:\gurobi1003\win64\matlab) addpath(C:\gurobi1003\win64\matlab) addpath(C:\gurobi1002\win64\matlab) C:\gurobi1003\win64\m…

Excel如何比较两列数据的不同

当遇到exel有两个列表的数据&#xff0c;需要比较得到他们的不同的部分&#xff0c;并且得到一个不同的值的列表。示例如下&#xff1a; 目的是&#xff1a;通过比较&#xff0c;知道Column2的哪些值不在在Column1里。 WPS直接提供了这一个功能&#xff0c;如下图&#xff1a;…

【日常总结】Swagger 3.0 + 集成 knife4j ,并设置header入参

一、场景 环境&#xff1a; 二、问题 思路 &#xff1a; 三、解决方案 &#xff08;推荐&#xff09; Stage 1&#xff1a;接入knife4j 依赖 Stage 2&#xff1a;修改 yaml 配置 Stage 3&#xff1a;修改 swagger 3 配置文件 Stage 4&#xff1a;查看效果 Swagger UI …

python爬虫实习找工作练习测试(以下内容仅供参考学习)

要求&#xff1a;获取下图指定网站的指定数据 空气质量状况报告-中国环境监测总站 输入&#xff1a;用户输入下载时间范围&#xff0c;格式为2022-10 输出&#xff1a;将更新时间在2022年10月1日到31日之间的文件下载到本地目录&#xff08;可配置&#xff09;&#xff0c;并…

WordPress:构建强大的网站和博客的完美选择

WordPress&#xff1a;构建强大的网站和博客的完美选择 一、WordPress 简介1.1 WordPress 介绍1.2 WordPress 优势 二、部署LNMP环境2.1 前提条件2.2 关闭防火墙和SELinux2.3 安装Nginx2.4 安装MySQL2.5 安装PHP2.6 配置Nginx2.7 配置MySQL2.8 配置PHP2.9 测试访问LNMP平台 三、…

Java中的spring——面试题+答案(Spring框架)——第19期

当涉及到Spring框架的面试时&#xff0c;深入理解Spring的各个方面是至关重要的。 Spring IoC 和 DI Spring的IoC是什么&#xff1f; 答案&#xff1a; 控制反转&#xff08;IoC&#xff09;是一种设计模式&#xff0c;它将对象的创建和依赖关系的管理从应用程序代码中移到容器…

【vue_3】关于超链接的问题

1、需求2、修改前的代码3、修改之后&#xff08;1&#xff09;第一次&#xff08;2&#xff09;第二次&#xff08;3&#xff09;第三次&#xff08;4&#xff09;第四次&#xff08;5&#xff09;第五次 1、需求 需求&#xff1a;要给没有超链接的列表添加软超链接 2、修改前…

【密码学引论】分组密码

第三章 分组密码 DES、IDEA、AES、SM4 1、分组密码定义&#xff08;按照五个组成部分答&#xff09; 密钥空间&#xff1a;属于对称加密算法kekd明密文空间&#xff1a;将明文划分为m比特的组&#xff0c;每一块依次进行加密加解密算法&#xff1a;由key决定一个明文到密文的…

【华为OD题库-039】乘坐保密电梯-java

题目 有一座保密大楼&#xff0c;你从0楼到达指定楼层m&#xff0c;必须这样的规则乘坐电梯&#xff1a;给定一个数字序列&#xff0c;每次根据序列中的数字n上升n层或者下降n层&#xff0c;前后两次操作的方向必须相反&#xff0c;规定首次的方向向上&#xff0c;自行组织序列…

OpenMesh 网格曲率计算

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 借鉴之前点云主曲率计算的思路(Matlab 点云主曲率计算),这里基于网格顶点中每个邻近顶点的法向量来计算出点云中每个顶点的主曲率值。 二、实现代码