java 里面 long 转换int内存分析

了解补码知识点

要将补码转换为十进制,需要确定补码的符号位。如果补码的符号位为1,则表示为负数,否则表示为正数。

假设我们有一个补码为1 0110 1011 1100 1101 1000 0011 1101 1100
0010 1101 1111 1101 1100 0001 1100 0011 0100
首先,确定符号位。根据补码的规则,最高位的1表示负数,因此这个补码表示一个负数。

将除符号位外的其余位取反。得到反码:0 1001 0100 0011 0010 0111 1100 0010 0011

将反码转换为原码。对于负数,反码加1即可得到原码:0 1001 0100 0011 0010 0111 1100 0010 0100

将原码转换为十进制。根据原码的规则,最高位的1表示负数,因此这个原码表示一个负数。

将其余位转换为十进制,得到的结果为:-539222988。

因此,补码101101011110011011000001111011100转换为十进制为-539222988

先考虑如何将二进制补码转换为十进制整数:
若符号位是0, 则该数是正数, 原码等同于补码. 可以由原码(也就是补码)得知代表的正整数.
若符号为是1, 则该数一定是负数, 可按照以下方式转换:
方式一: 先把符号位去掉, 把剩下的非符号位取反后得到一个无符号位的二进制序列, 将该二进制序列转换为十进制整数(注意:无符号位二进制序列代表的一定是正数),
将该整数加1得到的数便是原补码代表的整数的绝对值. 如: a = 1011(补码), 011取反得到100, 100代表4, 4+1=5,
|a|=5, a=-5.
方式二: 利用公式: (-1)2^(n-1) + 非符号位代表整数 = 值. 如a =1011(补码), n = 4, 011代表3 a = -12^3 + 3 = -5.

long转换为int

在Java中,将Long类型转换为int类型时,会发生类型转换和内存表示的变化。下面是转换的内存分析:

原始的Long类型的值以二进制补码形式存储在内存中。补码是一种表示有符号整数的方法,其中最高位表示符号位,0表示正数,1表示负数。

当将Long类型的值转换为int类型时,首先将Long类型的值截断为32位,只保留低32位。

如果截断后的32位二进制表示的值在int类型的范围内,转换的结果就是该32位二进制值。

如果截断后的32位二进制表示的值超出了int类型的范围,将发生溢出。溢出时,只保留截断后的32位二进制值的低32位,丢弃高位。

如果截断后的32位二进制值的最高位为1,表示负数,转换结果为负数的二进制形式。

示例1:

Long longValue = 1234567890L;
int intValue = longValue.intValue();

在这个示例中,longValue的
二进制: 10 1101 1111 1101 1100 0001 1100 0011 0100
二进制补码:0010 1101 1111 1101 1100 0001 1100 0011 0100

将其截断为32位后:1101 1111 1101 1100 0001 1100 0011 0100 (补码)
根据补码的规则,最高位的1表示负数,因此这个补码表示一个负数。将除符号位外的其余位取反。
方式一
按位取反得到反码:1010 0000 0010 0011 1110 0011 1100 1011
加1 得到原码
1010 0000 0010 0011 1110 0011 1100 1100 去掉第一位转换为十进制数为 539 222 988
1表示负数
转换为int类型的结果为:-539 222 988

方式二
按位取反:1010 0000 0010 0011 1110 0011 1100 1011 其对应的十进制数为 539 222 987
加1 539 222 988 |a|=539 222 988, a=-539 222 988
-10 0000 0010 0011 1110 0011 1100 1100
转换为int类型的结果为:-539 222 988

在这里插入图片描述
在这里插入图片描述

示例2:

Long longValue = 6444823059L;
int intValue = longValue.intValue();

在这个示例中,longValue的二进制
二进制: 1 1000 0000 0010 0100 0011 0010 0001 0011
补码: 0001 1000 0000 0010 0100 0011 0010 0001 0011

将其截断为32位后:1000 0000 0010 0100 0011 0010 0001 0011
根据补码的规则,最高位的1表示负数,因此这个补码表示一个负数。将除符号位外的其余位取反。
方式一
按位取反得到反码:1111 1111 1101 1011 1100 1101 1110 1100
加1 得到原码
1111 1111 1101 1011 1100 1101 1110 1101 去掉第一位转换为十进制数为 2 145 111 533
1表示负数
转换为int类型的结果为:-2 145 111 533

方式二
按位取反:1111 1111 1101 1011 1100 1101 1110 1100
其对应的十进制数为 2 145 111 532
加1 2 145 111 533 |a|=2 145 111 533, a=-2 145 111 533

转换为int类型的结果为:-2 145 111 533

在这里插入图片描述

在这里插入图片描述

示例3:

Long longValue = 6191460207L;
int intValue = longValue.intValue();

在这个示例中,longValue的二进制
二进制: 1 0111 0001 0000 1010 0010 1111 0110 1111
补码: 0001 0111 0001 0000 1010 0010 1111 0110 1111

将其截断为32位后:0111 0001 0000 1010 0010 1111 0110 1111
根据补码的规则,最高位的0表示正数,因此这个补码表示一个正数,正数的补码就是原码本身
0111 0001 0000 1010 0010 1111 0110 1111

转换为int类型的结果为:1 896 492 911

在这里插入图片描述
在这里插入图片描述

二进制在线转换地址
http://binary-converter.bchrt.com/

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

在其他python环境中使用jupyter notebook

1、切换到目标python环境 activate 目标python环境 2、安装notebook内核包 pip install ipykernel 3、加环境加入到notebook中 python -m ipykernel install 目标python环境 4、切换到base环境 activate base 5、打开目标项目的对应盘 如果,项目在c盘&…

web基础http与apache

一、http相关概念: http概述: HTTP 是一种用作获取诸如 HTML 文档这类资源的协议。它是 Web 上进行任何数据交换的基础,同时,也是一种客户端—服务器(client-server)协议 为解决"用什么样的网络协…

二叉树链式结构的实现

文章目录 1.前置说明 2.二叉树的遍历 文章内容 1.前置说明 学习二叉树的基本操作前,需先要创建一棵二叉树,然后才能学习其相关的基本操作。由于现在我们对于二叉树的了解还处于初级阶段,所以我们手动创建一棵简单的二叉树,以便…

SPI2外设驱动-W25Q64 SPI接口初始化

前言 (1)本系列是基于STM32的项目笔记,内容涵盖了STM32各种外设的使用,由浅入深。 (2)小编使用的单片机是STM32F105RCT6,项目笔记基于小编的实际项目,但是博客中的内容适用于各种单片…

React 使用 useRef() 获取循环中所有子组件实例

目录 背景思考实现完整代码:成功运行后的界面如下: 知识点总结uesRef() 作对象处理useImperativeHandle() 父组件操作引入子组件的内部方法最后 背景 之前项目中使用了antd pro 中的 可编辑表格 (EditableProTable),在页面中表格要经过多层遍…

远程连接虚拟机中ubuntu报错:Network error:Connection refused

ping检测一下虚拟机 可以ping通,说明主机是没问题 #检查ssh是否安装: ps -e |grep ssh发现ssh没有安装 #安装openssh-server sudo apt-get install openssh-server#启动ssh service ssh startps -e |grep ssh检查一下防火墙 #防火墙状态查看 sudo ufw…

云原生之使用Docker部署SSCMS内容管理系统

云原生之使用Docker部署SSCMS内容管理系统 一、SSCMS介绍二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍 三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本 四、下载SSCMS镜像五、部署SSCMS内容管理系统5.1 创建SSCMS容器5.2 检查SSC…

2023.8 -java - 继承

继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。 继承的特性 子类拥有父类非 private 的属性、方法。 子类可以拥有自己的属性和方法…

深度学习11:Transformer

目录 什么是 Transformer? Encoder Decoder Attention Self-Attention Context-Attention 什么是 Transformer(微软研究院笨笨) RNN和Transformer区别 Universal Transformer和Transformer 区别 什么是 Transformer? ​ …

【校招VIP】TCP/IP模型之常用协议和端口

考点介绍: 大厂测试校招面试里经常会出现TCP/IP模型的考察,TCP/IP协议是网络基础知识,是互联网的基石,不管你是做开发、运维还是信息安全的,TCP/IP 协议都是你绕不过去的一环,程序员需要像学会看书写字一样…

Typora上使用Mermaid语法展示流程图、时序图、甘特图

你已经安装Typora并打开了一个新文档后,可以按照以下详细步骤在Typora上使用Mermaid语法展示流程图、时序图、甘特图 流程图 使用graph LR声明开始,并使用箭头和连接符号定义节点之间的关系。例如,A --> B表示从节点A指向节点B的箭头连接。graph TB A[界面布局图] -->…

EasyPOI 实战总结

EasyPOI实战总结 简介 easypoi功能如同名字easy,主打的功能就是容易,让一个没见接触过poi的人员 就可以方便的写出Excel导出,Excel模板导出,Excel导入,Word模板导出,通过简单的注解和模板 语言(熟悉的表达式语法),完成以前复杂的写法 使用EasyPOI 环境搭建 # 1.引入相关依…

TensorFlow中slim包的具体用法

TensorFlow中slim包的具体用法 1、训练脚本文件(该文件包含数据下载打包、模型训练,模型评估流程)3、模型训练1、数据集相关模块:2、设置网络模型模块3、数据预处理模块4、定义损失loss5、定义优化器模块 本次使用的TensorFlow版本…

Leetcode 2235.两整数相加

一、两整数相加 给你两个整数 num1 和 num2,返回这两个整数的和。 示例 1: 输入:num1 12, num2 5 输出:17 解释:num1 是 12,num2 是 5 ,它们的和是 12 5 17 ,因此返回 17 。示例…

【OCR识别】tess4j图片识别文字

什么是OCR? OCR (Optical Character Recognition,光学字符识别)是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,通过检测暗、亮的模式确定其形状,然后用字符识别方法将形状翻译成计算机…

ServiceManager接收APP的跨进程Binder通信流程分析

现在一起来分析Server端接收(来自APP端)Binder数据的整个过程,还是以ServiceManager这个Server为例进行分析,这是一个至下而上的分析过程。 在分析之前先思考ServiceManager是什么?它其实是一个独立的进程,由init解析i…

【人脸考勤项目】

本项目主要是基于Opencv完成的人脸识别的考勤系统 人脸检测器的5种实现方法 方法一:haar方法进行实现(以下是基于notebook进行编码) # 步骤 # 1、读取包含人脸的图片 # 2.使用haar模型识别人脸 # 3.将识别结果用矩形框画出来# 导入相关包 …

ARM开发,stm32mp157a-A7核中断实验(实现按键中断功能)

1.实验目的:实现KEY1/LEY2/KE3三个按键,中断触发打印一句话,并且灯的状态取反; key1 ----> LED3灯状态取反; key2 ----> LED2灯状态取反; key3 ----> LED1灯状态取反; 2.分析框图: …

ACL2023 Prompt 相关文章速通 Part 1

Accepted Papers link: ACL2023 main conference accepted papers 文章目录 Accepted PapersPrompter: Zero-shot Adaptive Prefixes for Dialogue State Tracking Domain AdaptationQuery Refinement Prompts for Closed-Book Long-Form QAPrompting Language Models for Lin…

爬虫逆向实战(二十一)-- 某某点集登录与获取数据

登录 一、数据接口分析 主页地址:某某点集 1、抓包 通过抓包可以发现登录接口是phonePwdLogin 2、判断是否有加密参数 请求参数是否加密? 通过查看“载荷”模块可以发现有pwd和sig两个加密参数 请求头是否加密? 无响应是否加密&#x…