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

Java 16进制 10进制 2进制数 相互的转换

在 Java 中,进行进制之间的转换时,除了功能的正确性外,效率和安全性也很重要。为了确保高效和相对安全的转换,我们通常需要考虑:

  1. 性能:使用内置的转换方法,如 Integer.toHexString()Integer.toBinaryString() 等,通常比手动实现转换更高效。
  2. 安全性:避免溢出和处理负数或符号位的问题。

以下是针对 16进制、10进制和2进制数的相互转换 的高效且相对安全的方法。


1. 十六进制(Hex) ↔ 十进制(Decimal)

十六进制到十进制: 使用 Integer.parseInt() 方法将十六进制字符串解析为十进制数字。

十进制到十六进制: 使用 Integer.toHexString() 方法将十进制数字转换为十六进制字符串。

示例代码:
public class BaseConversion {public static void main(String[] args) {// 十六进制到十进制String hex = "1A3F";int decimal = Integer.parseInt(hex, 16);  // 使用 parseInt 方法将十六进制转为十进制System.out.println("Hex to Decimal: " + decimal);// 十进制到十六进制int decimalNum = 6703;String hexString = Integer.toHexString(decimalNum);  // 使用 toHexString 方法将十进制转为十六进制System.out.println("Decimal to Hex: " + hexString.toUpperCase());  // 输出大写的十六进制}
}
输出:
Hex to Decimal: 6703
Decimal to Hex: 1A3F

2. 十六进制(Hex) ↔ 二进制(Binary)

十六进制到二进制: 首先将十六进制字符串转换为十进制,然后再转换为二进制。

二进制到十六进制: 首先将二进制字符串转换为十进制,然后再转换为十六进制。

示例代码:
public class BaseConversion {public static void main(String[] args) {// 十六进制到二进制String hex = "1A3F";int decimalFromHex = Integer.parseInt(hex, 16);String binaryFromHex = Integer.toBinaryString(decimalFromHex);  // 十进制转二进制System.out.println("Hex to Binary: " + binaryFromHex);// 二进制到十六进制String binary = "1101000111111";int decimalFromBinary = Integer.parseInt(binary, 2);  // 二进制转十进制String hexFromBinary = Integer.toHexString(decimalFromBinary);  // 十进制转十六进制System.out.println("Binary to Hex: " + hexFromBinary.toUpperCase());  // 输出大写的十六进制}
}
输出:
Hex to Binary: 1101000111111
Binary to Hex: 1A3F

3. 十进制(Decimal) ↔ 二进制(Binary)

十进制到二进制: 使用 Integer.toBinaryString() 方法将十进制转换为二进制。

二进制到十进制: 使用 Integer.parseInt() 方法将二进制字符串解析为十进制数字。

示例代码:
public class BaseConversion {public static void main(String[] args) {// 十进制到二进制int decimal = 6703;String binary = Integer.toBinaryString(decimal);  // 十进制转二进制System.out.println("Decimal to Binary: " + binary);// 二进制到十进制String binaryStr = "1101000111111";int decimalFromBinary = Integer.parseInt(binaryStr, 2);  // 二进制转十进制System.out.println("Binary to Decimal: " + decimalFromBinary);}
}
输出:
Decimal to Binary: 1101000111111
Binary to Decimal: 6703

4. 高效与安全性考虑

  1. 高效性
    • 使用 Integer.parseInt()Integer.toBinaryString() 等标准库方法,通常比手动实现进制转换更高效。
    • 不需要对负数特别处理,因为 parseInt()toBinaryString() 默认已经处理了符号位。
  2. 安全性
    • 防止溢出Integer.parseInt() 方法的上限是 Integer.MAX_VALUE(即 2147483647)。如果你需要更大的数字,可以使用 Long.parseLong()BigInteger
    • 避免负数问题Integer.toBinaryString()Integer.toHexString()Integer.toString() 等方法都已自动处理负数的转换,适用于常见的整数类型。
    • 使用大数字:对于超过 32 位的数字(比如 Long 类型或更大的数字),可以使用 LongBigInteger 来处理,BigInteger 可以支持任意大小的整数。
示例代码(使用 BigInteger 处理大数字):
import java.math.BigInteger;public class BaseConversion {public static void main(String[] args) {// BigInteger 适用于大数字转换String largeHex = "A3B2C4D5E6F7";BigInteger bigDecimal = new BigInteger(largeHex, 16);  // 十六进制转大整数System.out.println("Large Hex to Decimal: " + bigDecimal);// 大整数转十六进制String bigHex = bigDecimal.toString(16);  // 转回十六进制System.out.println("Large Decimal to Hex: " + bigHex.toUpperCase());}
}
输出:
Large Hex to Decimal: 181477716850295
Large Decimal to Hex: A3B2C4D5E6F7

总结:

  • 十六进制 ↔ 十进制 使用 Integer.parseInt()Integer.toHexString()
  • 十六进制 ↔ 二进制 使用 Integer.toBinaryString()Integer.parseInt()
  • 十进制 ↔ 二进制 使用 Integer.toBinaryString()Integer.parseInt()
  • 对于大数字,使用 BigInteger 类来处理超过 32 位的进制转换。

这种方法是 高效 的,并且通过 Java 内置的类,已经相对安全地处理了符号和溢出的问题。

以下是16进制、10进制和2进制之间的转换表格。这个表格展示了常见的数值在这三种进制之间的相互转换。

16进制、10进制、2进制数转换表

16进制10进制2进制
000000
110001
220010
330011
440100
550101
660110
770111
881000
991001
A101010
B111011
C121100
D131101
E141110
F151111
101610000
111710001
121810010
131910011
142010100
152110101
162210110
172310111
182411000
192511001
1A2611010
1B2711011
1C2811100
1D2911101
1E3011110
1F3111111
2032100000
2133100001
2234100010
2335100011
2436100100
2537100101
2638100110
2739100111
2840101000
2941101001
2A42101010
2B43101011
2C44101100
2D45101101
2E46101110
2F47101111
3048110000
3149110001
3250110010
3351110011
3452110100
3553110101
3654110110
3755110111
3856111000
3957111001
3A58111010
3B59111011
3C60111100
3D61111101
3E62111110
3F63111111

http://www.lryc.cn/news/529710.html

相关文章:

  • 力扣动态规划-14【算法学习day.108】
  • 数据结构day02
  • 随笔 | 写在一月的最后一天
  • JVM方法区
  • 一文读懂fgc之cms
  • MYSQL 商城系统设计 商品数据表的设计 商品 商品类别 商品选项卡 多表查询
  • HTB:Administrator[WriteUP]
  • 开源项目Umami网站统计MySQL8.0版本Docker+Linux安装部署教程
  • FBX SDK的使用:基础知识
  • VisionMamba安装
  • h2oGPT
  • Win10安装MySQL、Pycharm连接MySQL,Pycharm中运行Django
  • 使用Pygame制作“俄罗斯方块”游戏
  • 【Block总结】ODConv动态卷积,适用于CV任务|即插即用
  • RK3568 opencv播放视频
  • 《LLM大语言模型+RAG实战+Langchain+ChatGLM-4+Transformer》
  • 【搜索回溯算法篇】:拓宽算法视野--BFS如何解决拓扑排序问题
  • 计算机网络 (61)移动IP
  • Elasticsearch+kibana安装(简单易上手)
  • 音视频多媒体编解码器基础-codec
  • 【算法与数据结构】动态规划
  • DeepSeekMoE:迈向混合专家语言模型的终极专业化
  • 什么是Maxscript?为什么要学习Maxscript?
  • HyperLogLog 近似累计去重技术解析:大数据场景下的高效基数统计
  • LabVIEW透镜多参数自动检测系统
  • MySQL数据库(二)- SQL
  • 【Block总结】HiLo注意力,局部自注意力捕获细粒度的高频信息,通过全局注意力捕获低频信息|即插即用
  • python 使用Whisper模型进行语音翻译
  • C# Winform enter键怎么去关联button
  • Github 2025-01-30 Go开源项目日报 Top10