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进制转换与编码机制内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 解决Java字符串JSON转换异常:cn.hutool.json.JSONException: Mismatched hr and body

    解决Java字符串JSON转换异常:cn.hutool.json.JSONException: Mismatched 

    这篇文章主要给大家介绍了关于如何解决Java字符串JSON转换异常:cn.hutool.json.JSONException: Mismatched hr and body的相关资料,文中将解决的办法通过代码介绍的非常详细,需要的朋友可以参考下
    2024-01-01
  • JAVA中ListIterator和Iterator详解与辨析(推荐)

    JAVA中ListIterator和Iterator详解与辨析(推荐)

    这篇文章主要介绍了JAVA中ListIterator和Iterator详解与辨析,需要的朋友可以参考下
    2017-04-04
  • MyBatis Generator介绍及使用方法

    MyBatis Generator介绍及使用方法

    MyBatis Generator 是一款针对 MyBatis 或 iBATIS 设计的代码生成器,由 MyBatis 官方提供,这篇文章主要介绍了MyBatis Generator介绍及使用方法,需要的朋友可以参考下
    2023-06-06
  • 浅谈java分页三个类 PageBean ResponseUtil StringUtil

    浅谈java分页三个类 PageBean ResponseUtil StringUtil

    下面小编就为大家带来一篇浅谈java分页三个类 PageBean ResponseUtil StringUtil。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07
  • Spring中AOP注解@Aspect的使用详解

    Spring中AOP注解@Aspect的使用详解

    这篇文章主要介绍了Spring中AOP注解@Aspect的使用详解,AOP是种面向切面的编程思想,面向切面编程是将程序抽象成各个切面,将那些影响了多个类的公共行为抽取到一个可重用模块里,减少系统的重复代码,降低模块间的耦合度,增强代码的可操作性和可维护性,需要的朋友可以参考下
    2024-01-01
  • 基于spring-mvc.xml和application-context.xml的配置与深入理解

    基于spring-mvc.xml和application-context.xml的配置与深入理解

    这篇文章主要介绍了spring-mvc.xml和application-context.xml的配置与深入解析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • 解析本地方法映射Java层的数据类型

    解析本地方法映射Java层的数据类型

    这篇文章给大家介绍了本地方法映射Java层的数据类型,包括基础类型映射,引用类型映射等等,对java层数据类型映射相关知识,感兴趣的朋友跟随脚本之家小编一起看看吧
    2018-03-03
  • Java获取时间差(天数差,小时差,分钟差)代码示例

    Java获取时间差(天数差,小时差,分钟差)代码示例

    这篇文章主要介绍了Java获取时间差(天数差,小时差,分钟差)代码示例,使用SimpleDateFormat来实现的相关代码,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11
  • Spring国际化和Validation详解

    Spring国际化和Validation详解

    本文介绍了SpringBoot中国际化和Validation的融合实现,包括配置MessageSource和LocalValidatorFactoryBean,以及自定义约束注解和校验器,通过解析请求头中的Accept-Language,SpringBoot可以返回不同语言的文本信息
    2024-11-11
  • Java如何简单快速入门JWT(token生成与验证)

    Java如何简单快速入门JWT(token生成与验证)

    这篇文章主要给大家介绍了关于Java如何简单快速入门JWT(token生成与验证)的相关资料,JWT是一个加密的字符串,JWT传输的信息经过了数字签名,因此传输的信息可以被验证和信任,需要的朋友可以参考下
    2023-12-12

最新评论