【JavaSE专栏25】进制转换的那些事,十进制转R进制、R进制转十进制是什么操作?

简介: 【JavaSE专栏25】进制转换的那些事,十进制转R进制、R进制转十进制是什么操作?

本文对 Java 中的进制转换流程进行了介绍,讲解了十进制转R进制、R进制转十进制的操作过程,并给出了样例代码。

一、什么是进制转换

1.1 进制

进制是一种数学表示方法,用于表示数字的基数和位数。在常见的数学系统中,我们使用十进制系统,也称为基数为 10 1010 的进制系统。它使用了 0 00 - 9 99 的十个数字来表示所有的数字。例如,数字 42 4242 在十进制系统中表示为 42 4242,其中 4 44 代表 4 44 个十,2 22 代表 2 22 个一。

除了十进制,还有其他常见的进制系统,如二进制(基数为 2 22)、八进制(基数为 8 88)和十六进制(基数为 16 1616)。二进制只使用 0 001 11 两个数字来表示所有的数字,八进制使用 0 00 - 7 77 的八个数字,十六进制使用 0 00 - 9 99A AA - F FF 的十六个数字( A AA 代表 10 1010B BB 代表 11 1111 ,以此类推)。

进制在计算机科学中非常重要,因为计算机以二进制的方式进行计算和存储数据。进制转换是将一个数值从一种进制转换为另一种进制的过程,这在计算机编程和数据处理中经常用到。

1.2 进制转换

进制转换是指将一个数值表达式从一种进制转换为另一种进制的过程。在计算机科学和数学中,最常见的进制是 十进制(decimal)二进制(binary)八进制(octal)十六进制(hexadecimal)

进制转换可以将一个数值在不同进制之间表示,以便更方便地进行计算、存储和传输

常见的进制转换方法包括以下几类。

  1. 二进制转换为十进制:将每一位的二进制数乘以对应的权值,然后将所有结果相加。
  2. 十进制转换为二进制:使用除 2 22 取余法,将十进制数反复除以 2 22,直到商为 0 00,然后将余数倒序排列。
  3. 十进制转换为八进制或十六进制:使用除以 8 8816 1616 取余法,将十进制数反复除以 8 8816 1616,直到商为 0 00,然后将余数倒序排列。
  4. 八进制或十六进制转换为十进制:将每一位的八进制或十六进制数乘以对应的权值,然后将所有结果相加。
  5. 八进制或十六进制转换为二进制:将每一位的八进制或十六进制数转换为对应的二进制数。
  6. 二进制转换为八进制或十六进制:将二进制数按照每 3 33 位或 4 44 位进行分组,转换为对应的八进制或十六进制数。

进制转换在计算机科学中非常重要,特别是在处理二进制数据时

例如,计算机中的数据存储和处理通常是以二进制形式进行的,但在人类的角度来看,使用十进制更加直观。因此,进制转换可以帮助我们在不同进制之间进行数据的转换和理解。


二、10进制转R进制

下面是一个示例代码,展示了如何将一个十进制数转换为指定进制(R进制)的数。

public class DecimalToRBase {
    public static void main(String[] args) {
        int decimalNumber = 153; // 十进制数
        int base = 16; // R进制
        String rBaseNumber = convertDecimalToRBase(decimalNumber, base);
        System.out.println(decimalNumber + " 的 " + base + " 进制表示为: " + rBaseNumber);
    }
    private static String convertDecimalToRBase(int decimalNumber, int base) {
        StringBuilder rBaseNumber = new StringBuilder();
        while (decimalNumber > 0) {
            int remainder = decimalNumber % base;
            rBaseNumber.insert(0, getRBaseDigit(remainder));
            decimalNumber /= base;
        }
        return rBaseNumber.toString();
    }
    private static char getRBaseDigit(int digitValue) {
        if (digitValue < 10) {
            return (char) (digitValue + '0');
        } else {
            return (char) (digitValue - 10 + 'A');
        }
    }
}

这个示例将十进制数 153 153153 转换为 16 1616 进制数,输出结果为 153 的 16 进制表示为: 99。你可以根据需要修改 decimalNumberbase 的值,将其他十进制数转换为不同进制的数。


三、R进制转10进制

下面是一个示例代码,用于将 R进制 数转换为 10 1010 进制数。

import java.util.Scanner;
public class RadixConversion {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入R进制数: ");
        String rNum = scanner.next();
        System.out.print("请输入R的值: ");
        int r = scanner.nextInt();
        int decimalNum = toDecimal(rNum, r);
        System.out.println("转换后的十进制数为: " + decimalNum);
    }
    // 将R进制数转换为10进制数
    public static int toDecimal(String rNum, int r) {
        int decimalNum = 0;
        int power = 1;
        for (int i = rNum.length() - 1; i >= 0; i--) {
            int digit = Character.isDigit(rNum.charAt(i)) ? rNum.charAt(i) - '0' : rNum.charAt(i) - 'A' + 10;
            decimalNum += digit * power;
            power *= r;
        }
        return decimalNum;
    }
}

在这个示例代码中,我们通过用户输入获取了一个 R进制 的数和 R RR 的值,然后调用toDecimal方法将R进制数转换为 10 1010 进制数,并输出结果。

注意,在转换过程中,我们将R进制数从右往左进行遍历,将每一位的数值乘以相应的权重后累加到结果中,权重从 1 11 开始,每次乘以 R RR 的值。在计算过程中,如果遇到字母,则将其转换为相应的数值,字母A对应的数值为 10 1010,字母 B 对应的数值为 11 1111,以此类推。


四、总结

本文对 Java 中的进制转换流程进行了介绍,讲解了十进制转R进制、R进制转十进制的操作过程,并给出了样例代码。在下一篇博客中,将讲解 Java 中数组的定义方法。

相关文章
|
SQL 关系型数据库 MySQL
mysql 组复制
mysql 组复制
|
SQL 运维 数据挖掘
带你读《Apache Doris 案例集》——03 Apache Doris 在金融壹账通指标中台的应用实践(1)
带你读《Apache Doris 案例集》——03 Apache Doris 在金融壹账通指标中台的应用实践(1)
451 2
|
12月前
|
机器学习/深度学习 人工智能 自然语言处理
论文推荐:R1-Omni、VisualPRM、4D LangSplat、Vision-R1、GoT
简要介绍:由复旦大学、上海AI实验室等机构提出了首个统一多模态理解和生成的奖励模型UnifiedReward。该工作构建了大规模人类偏好数据集,包含图像和视频生成/理解任务,并利用该模型进行自动构建高质量偏好对数据,最终通过DPO优化视觉模型。实验结果表明,联合学习评估多样化视觉任务可以带来显著的相互益处。
414 1
|
IDE 开发工具 图形学
Visual Basic游戏开发:进入娱乐世界的编程
【4月更文挑战第27天】本文引导初学者使用Visual Basic进行游戏开发,强调其易学性、图形支持和Windows兼容性。通过搭建开发环境、学习基础语法,从“猜数字”到“贪吃蛇”游戏实例,逐步进阶。此外,探讨了性能优化、引入游戏引擎和多媒体音效等高级技巧,鼓励开发者用VB开启游戏编程之旅,创造自己的娱乐世界。
434 0
|
11月前
|
存储 弹性计算 数据管理
阿里云对象存储oss怎么收费?存储费用+流量收费标准
阿里云对象存储OSS收费标准包含存储费、流量费及请求费等,支持按量付费与包年包月两种模式。标准型本地冗余存储按量付费价格为0.09元/GB/月,包年包月500GB预留空间优惠价118元/年。流量费仅收取公网出方向费用,忙时0.50元/GB,闲时0.25元/GB。更多详情可参考官方页面。
2065 91
|
数据采集
风云突变,芝麻代理,品易代理,极光代理,太阳代理谢幕,如何挑选新的代理IP?
近期,芝麻代理、品易代理等知名代理服务商相继关闭IP业务,引发市场巨变。青果网络凭借丰富IP资源和强大技术支持,在此背景下脱颖而出。本文将详细介绍如何测试青果网络代理IP的质量,包括稳定性、数据采集效率、地理覆盖能力和多线程支持等方面,并探讨其价格优势。
|
机器学习/深度学习 人工智能 文字识别
香橙派——雕琢智能时代的瑰宝为AI而生(二)
香橙派——雕琢智能时代的瑰宝为AI而生(二)
1312 2
|
JavaScript Java 测试技术
基于ssm+vue.js的校园二手交易平台附带文章和源代码设计说明文档ppt
基于ssm+vue.js的校园二手交易平台附带文章和源代码设计说明文档ppt
311 1
|
前端开发 数据可视化 搜索推荐
数据驱动的前端设计与开发实践
本文将介绍如何在前端设计与开发中充分利用数据驱动的方法,通过数据分析、用户行为追踪和可视化等手段,指导前端界面设计和功能开发,提高用户体验和产品质量。
|
存储 人工智能 自然语言处理
AGI时代的奠基石:Agent+算力+大模型是构建AI未来的三驾马车吗?
AI Agent的训练离不开算力,服务器作为一个强大的计算中心,为AI Agent提供算力基础,支持其进行复杂计算和处理大规模数据的任务,包括模型训练、推理和处理大规模数据集。
1841 2