Java 中的进制转换与编码机制详解

 更新时间:2025年04月28日 15:07:20   作者:禹曦a  
在 Java 编程领域,进制转换是一项极为基础且重要的技能,下面给大家介绍Java 中的进制转换与编码机制,感兴趣的朋友一起看看吧

在 Java 编程领域,进制转换是一项极为基础且重要的技能。无论是处理底层的二进制数据,还是进行数字的高效存储和运算,理解各种进制及其转换方式,以及补码和反码的概念,都是必不可少的。下面,我们将深入探讨这一主题。

一、常见进制概述

1. 二进制(Binary)

二进制是一种以 2 为基数的计数系统,仅使用 0 和 1 两个数字。在计算机底层,数据的存储和传输都是以二进制的形式进行的,因为计算机的硬件电路很容易实现两种状态的表示,如开与关、高电平与低电平。例如,二进制数 101 表示为 1×22+0×21+1×20=5。

2. 八进制(Octal)

八进制以 8 为基数,使用 0 - 7 这八个数字。八进制在早期的计算机系统中较为常用,它可以方便地与二进制进行转换,简化二进制数据的表示。例如,八进制数 37 表示为 3×81+7×80=31。

3. 十进制(Decimal)

十进制是我们日常生活中最常用的计数系统,以 10 为基数,使用 0 - 9 这十个数字。在 Java 程序中,数字常量默认采用十进制表示。

4. 十六进制(Hexadecimal)

十六进制以 16 为基数,使用 0 - 9 和 A - F(或 a - f)表示 0 - 15。在计算机编程中,十六进制常用于表示内存地址、颜色值等,与二进制之间的转换也很方便。例如,十六进制数 A3 表示为 10×161+3×160=163。

二、Java 中的进制转换

1. 十进制转其他进制

在 Java 中,可以使用Integer类的静态方法toBinaryString()toOctalString()toHexString()将十进制整数转换为二进制、八进制和十六进制字符串。

public class DecimalToOther {
    public static void main(String[] args) {
        int decimal = 25;
        System.out.println("十进制 " + decimal + " 转换为二进制: " + Integer.toBinaryString(decimal));
        System.out.println("十进制 " + decimal + " 转换为八进制: " + Integer.toOctalString(decimal));
        System.out.println("十进制 " + decimal + " 转换为十六进制: " + Integer.toHexString(decimal));
    }
}

2. 其他进制转十进制

通过Integer类的parseInt()方法,并指定基数,可以将其他进制的字符串转换为十进制整数。

public class OtherToDecimal {
    public static void main(String[] args) {
        String binary = "11001";
        String octal = "31";
        String hexadecimal = "19";
        System.out.println("二进制 " + binary + " 转换为十进制: " + Integer.parseInt(binary, 2));
        System.out.println("八进制 " + octal + " 转换为十进制: " + Integer.parseInt(octal, 8));
        System.out.println("十六进制 " + hexadecimal + " 转换为十进制: " + Integer.parseInt(hexadecimal, 16));
    }
}

3. 二进制与八进制、十六进制互转

二进制转八进制

可以将二进制数从右到左每三位一组进行划分,然后将每组转换为对应的八进制数字。

public class BinaryToOctal {
    public static void main(String[] args) {
        String binary = "11001";
        int decimal = Integer.parseInt(binary, 2);
        String octal = Integer.toOctalString(decimal);
        System.out.println("二进制 " + binary + " 转换为八进制: " + octal);
    }
}

八进制转二进制

先将八进制数转换为十进制数,再将十进制数转换为二进制数。

public class OctalToBinary {
    public static void main(String[] args) {
        String octal = "31";
        int decimal = Integer.parseInt(octal, 8);
        String binary = Integer.toBinaryString(decimal);
        System.out.println("八进制 " + octal + " 转换为二进制: " + binary);
    }
}

二进制转十六进制

将二进制数从右到左每四位一组进行划分,然后将每组转换为对应的十六进制数字。

public class BinaryToHexadecimal {
    public static void main(String[] args) {
        String binary = "11001";
        int decimal = Integer.parseInt(binary, 2);
        String hexadecimal = Integer.toHexString(decimal);
        System.out.println("二进制 " + binary + " 转换为十六进制: " + hexadecimal);
    }
}

十六进制转二进制

先将十六进制数转换为十进制数,再将十进制数转换为二进制数。

public class HexadecimalToBinary {
    public static void main(String[] args) {
        String hexadecimal = "19";
        int decimal = Integer.parseInt(hexadecimal, 16);
        String binary = Integer.toBinaryString(decimal);
        System.out.println("十六进制 " + hexadecimal + " 转换为二进制: " + binary);
    }
}

三、补码和反码

1. 反码(One's Complement)

在 Java 中,反码用于表示负数。对于正数,其反码与原码相同;对于负数,其反码是在原码的基础上,符号位(最高位)不变,其余各位取反。然而,Java 本身并没有直接获取反码的内置方法,但可以通过自定义方法来实现。

public class OnesComplement {
    public static String getOnesComplement(int number) {
        if (number >= 0) {
            return Integer.toBinaryString(number);
        } else {
            String binary = Integer.toBinaryString(Math.abs(number));
            StringBuilder onesComplement = new StringBuilder();
            for (char bit : binary.toCharArray()) {
                onesComplement.append(bit == '0'? '1' : '0');
            }
            return "1" + onesComplement.toString();
        }
    }
    public static void main(String[] args) {
        int num = -5;
        System.out.println(num + " 的反码: " + getOnesComplement(num));
    }
}

2. 补码(Two's Complement)

补码也是用于表示负数的一种编码方式,在 Java 中广泛应用。对于正数,其补码与原码相同;对于负数,其补码是在反码的基础上,末位加 1。同样,Java 没有直接获取补码的内置方法,但可以通过如下方式实现。

public class TwosComplement {
    public static String getOnesComplement(int number) {
        if (number >= 0) {
            return Integer.toBinaryString(number);
        } else {
            String binary = Integer.toBinaryString(Math.abs(number));
            StringBuilder onesComplement = new StringBuilder();
            for (char bit : binary.toCharArray()) {
                onesComplement.append(bit == '0'? '1' : '0');
            }
            return "1" + onesComplement.toString();
        }
    }
    public static String getTwosComplement(int number) {
        if (number >= 0) {
            return Integer.toBinaryString(number);
        } else {
            String onesComplement = getOnesComplement(number);
            StringBuilder twosComplement = new StringBuilder(onesComplement);
            for (int i = twosComplement.length() - 1; i >= 0; i--) {
                if (twosComplement.charAt(i) == '0') {
                    twosComplement.setCharAt(i, '1');
                    return twosComplement.toString();
                } else {
                    twosComplement.setCharAt(i, '0');
                }
            }
            return "1" + twosComplement.toString();
        }
    }
    public static void main(String[] args) {
        int num = -5;
        System.out.println(num + " 的补码: " + getTwosComplement(num));
    }
}

上述文章添加了更多进制转换的代码示例,涵盖了二进制与八进制、十六进制之间的相互转换,同时在补码和反码部分增加了main方法用于测试。希望这符合你的需求。

到此这篇关于Java 中的进制转换与编码机制的文章就介绍到这了,更多相关Java进制转换与编码机制内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringCloud Eureka服务注册中心应用入门详解

    SpringCloud Eureka服务注册中心应用入门详解

    这篇文章主要介绍了Spring Cloud Eureka服务注册中心入门流程分析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07
  • Spring纯Java配置集成kafka代码实例

    Spring纯Java配置集成kafka代码实例

    这篇文章主要介绍了Spring纯Java配置集成kafka代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • 源码分析Nacos如何动态刷新配置

    源码分析Nacos如何动态刷新配置

    从架构图上可以知道,Nacos提供了两种服务,一种是用于服务注册、发现的Naming Service,一种是用于配置中心、动态配置的Config Service,本文将从源码角度分析Nacos如何动态刷新配置,需要的可以了解下
    2025-08-08
  • Java中实现Excel数字与文本转换的示例代码

    Java中实现Excel数字与文本转换的示例代码

    在数据处理过程中,经常会遇到需要将Excel单元格中的文本转换为数字,或将数字转换为文本的情况,下面就来详细的介绍一下,感兴趣的可以了解下
    2025-11-11
  • 如何使用Guava Cache做缓存

    如何使用Guava Cache做缓存

    Cache在ConcurrentHashMap的基础上提供了自动加载数据、清除数据、get-if-absend-compute的功能,本文给大家介绍如何使用Guava Cache做缓存,感兴趣的朋友一起看看吧
    2023-11-11
  • Mybatis查询Sql结果未映射到对应得实体类上的问题解决

    Mybatis查询Sql结果未映射到对应得实体类上的问题解决

    使用mybatis查询表数据得时候,发现对应得实体类字段好多都是null,本文主要介绍了Mybatis查询Sql结果未映射到对应得实体类上的问题解决,具有一定的参考价值,感兴趣的可以了解一下
    2024-02-02
  • SpringBoot集成MyBatis实现SQL拦截器的实战指南

    SpringBoot集成MyBatis实现SQL拦截器的实战指南

    这篇文章主要为大家详细介绍了SpringBoot集成MyBatis实现SQL拦截器的相关知识,文中的示例代码讲解详细,有需要的小伙伴可以参考一下
    2025-07-07
  • Java 中Map 的用法详解

    Java 中Map 的用法详解

    本文主要介绍java 中的Map 接口, 这里对Map 接口下的几个类做了详细介绍,希望对学习java 编程的小伙伴有所帮助
    2016-07-07
  • 深入理解Java基础中的集合框架

    深入理解Java基础中的集合框架

    Java集合框架(Java Collections Framework, JCF)也称容器,这里可以类比 C++中的 STL,在这里主要对如下部分进行源码分析,及在面试中常见的问题,例如,在阿里面试常问到的 HashMap和ConcurrentHashMap原理等等,深入源码分析是面试中必备的技能
    2023-08-08
  • java和javascript中过滤掉img形式的字符串不显示图片的方法

    java和javascript中过滤掉img形式的字符串不显示图片的方法

    这篇文章主要介绍了java和javascript中过滤掉img形式的字符串不显示图片的方法,以实例形式分别讲述了采用java和javascript实现过滤掉img形式字符串的技巧,需要的朋友可以参考下
    2015-02-02

最新评论