当前位置: 首页 > news >正文

java 位运算转换 bit operator convert

位运算专题

Java Bit Operation-位运算基本概念介绍

Java Bit Operation-位运算类型转换

leetcode bit operator 位运算入门介绍

leetcode 002-leetcode.136 single-number 力扣.136 只出现一次的数字

leetcode 002-leetcode.137 single-number-ii 力扣.137 只出现一次的数字II

leetcode 002-leetcode.260 single-number-iii 力扣.260 只出现一次的数字III

问题

对于 32 位的字符串 379a1e5df3534885a94001373467f33e,如果想转换为整数。

JDK 内置的方法

借助 BigInteger

new BigInteger("379a1e5df3534885a94001373467f33e", 16)

结果为

73907769400197500546813542834226328382

jdk1.8 的方法

long result = Long.parseUnsignedLong("379a1e5df3534885a94001373467f33e", 16);

最大值问题

这种转换在某种程度上,要考虑到最大值的问题。

将 byte 转换为 int

首先:一个int有4个八位,也就是4个字节。

代码

如果我们要讲一个 byte[] 数组转换为int类型:

首先看如下代码:

/*** byte数组转int类型的对象** @param bytes 字节数组* @return int*/
public int byteToInt(byte[] bytes) {return (bytes[0] & 0xff) << 24| (bytes[1] & 0xff) << 16| (bytes[2] & 0xff) << 8| (bytes[3] & 0xff);
}

解释

因为一个byte是八位,int有四个八位,所以将这个byte[0]左移24位,就将这个byte[0]放在了int的最高一个八位上。

同理,byte[1]放置在第二个八位上,byte[2]放置在第三个八位上,byte[3]放置在第四个八位上。

  • 问题:为什么要 &0xff?

首先 0xff 是十六进制的255,也就是二进制的1111 1111,对0xff取与,实际上就是要取这个数最低八位的值,截一个字节的长度。

  • 如果不用&0xff:
  1. 计算机中是用补码的方式进行存储数据。

  2. 如果不用&0xff,那么在进行负数的运算时就会出现问题,如:使用-1进行运算,-1的byte补码是:1111 1111,对应的十六进制数字是0xff;

-1的int补码(32位)是1111 1111 1111 1111 1111 1111,如果将byte转换为int,那么对应的十六进制数是0xffff。

结果不正确(对于负数而言)。

所以为了计算结果的正确性,我们就要对字节进行&0xff操作。

将int转换为byte[]:

只需要进行相反的方向操作就好:

/*** int转byte数组** @param num 整数* @return byte 数组*/
public byte[] intToByte(int num) {byte[] bytes = new byte[4];bytes[0] = (byte) ((num >> 24) & 0xff);bytes[1] = (byte) ((num >> 16) & 0xff);bytes[2] = (byte) ((num >> 8) & 0xff);bytes[3] = (byte) (num & 0xff);return bytes;
}

参考资料

byteToInt64

convert-toint64-equivalent-in-java

分布式系统唯一ID生成方案汇总

byte 与 int 互转

Java将byte[]和int的互相转换

关于JAVA中:int和byte的互相转换

http://www.dtcms.com/a/294870.html

相关文章:

  • WTL 桌面开发入门
  • Medical | 批次 批号 批准文号
  • 直接偏好优化(DPO):原理、演进与大模型对齐新范式
  • git查看两个commit之间有哪些Pull Request
  • 【盘古100Pro+开发板实验例程】FPGA学习 | Modelsim 的使用和 do 文件编写
  • 如何通过内网穿透,访问公司内部服务器?
  • 企业选择将服务器放在IDC机房托管的优势
  • Python 程序设计讲义(7):Python 的基本数据类型——整数类型
  • 什么是HTTP长连接、短连接?谁更能抗DoS攻击?
  • Vue 中 :value 和 :value.sync 的区别
  • La Création du C++ : Une Épopée dans l‘Évolution de la Programmation
  • Encore.ts:下一代高性能 TypeScript 后端框架的崛起
  • 后仿之 SDF优先级和相关概念
  • Kubernetes 服务发布进阶
  • 大模型开发
  • 图的BFS和DFS
  • 优化 Elasticsearch JVM 参数配置指南
  • 网安-SQL注入-sqli-labs
  • 前端Web性能核心指标全解析与优化实战指南
  • Mermaid流程图
  • netstat -tunlp | grep的作用
  • day 33打卡
  • 位运算在算法竞赛中的应用(基于C++语言)_位运算优化
  • SAP亚太区借力Business AI加速云转型,第二季度客户扩展势头强劲
  • 【Lucene】leafreadercontext逻辑段与segment物理磁盘段的关系
  • 牛油果褐变的成因与食用安全
  • 天津大学陈亚楠教授团队 ACS AEM:焦耳热超快合成非平衡态能源材料——毫秒级制备与跨体系性能突破
  • 本地运行C++版StableDiffusion!开源应用StableVerce发布
  • GTSuite许可问题解决方法
  • Flask框架全面详解