前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >详解HarmonyOS 原生应用里的进制转换神器

详解HarmonyOS 原生应用里的进制转换神器

作者头像
徐建国
发布于 2024-08-07 08:00:48
发布于 2024-08-07 08:00:48
32400
代码可运行
举报
文章被收录于专栏:个人路线个人路线
运行总次数:0
代码可运行

1. 前言

计算机编程广袤领域中,进制转换犹如一座神秘而关键的桥梁,连接着数字世界的不同维度。它不仅仅是一项基础的技能,更是理解计算机内部运作机制、优化算法效率以及解决复杂问题的重要基石。

进制,作为数字的表达形式,在不同的场景中发挥着独特的作用。无论是二进制的简洁高效,用于计算机底层的运算和数据存储;还是十六进制的紧凑和直观,常用于表示内存地址和颜色编码;亦或者是我们日常生活中最熟悉的十进制,都各自有着不可替代的价值。

今天,让我们一同踏上这段充满探索与发现的旅程,揭开进制转换的神秘面纱。当然我们可以选择不同编程语言实现不同进制之间的转换,如 C/C++,Java,JavaScript 等。本章节主要以 ArkTS 语言和 ArkUI 框架为主,开发一款用于进制转换的 HarmonyOS 原生应用程序。

2. 进制转换初解

进制转换是计算机科学和数学中的一个基本概念,它涉及到将数字从一个数制(或基数)转换为另一个数制。最常见的进制包括二进制(0 和 1,基数为 2)、八进制(0 ~ 7,基数为 8)、十六进制(0 ~ 9 和 A ~ F,基数为 16)。

2.1 工具界面和操作方式

1) 直观的布局

使用沿垂直方向布局容器 Column、沿水平方向布局容器 Row、文本显示 Text、以及输入框 TextInput 组件构建进制转换页面。

2)简洁的输入框

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
TextInput({ placeholder : `请输入需要转换的二进制字符`, text: this.convert.getBinary() })
  .layoutWeight(1)
  .height('100%')
  .placeholderFont({
    size: 12
  })
  .borderRadius(8)
  .showUnderline(true)
  .underlineColor({
    normal: Color.Orange,
    typing: Color.Green,
    error: Color.Red,
    disable: Color.Gray
  })

2.2 支持的进制类型

1)二进制使用场景

  • 计算机内部表示:计算机中的所有信息,包括数据、指令和内存地址,都是以二进制形式存储和处理。
  • 数据传输:在通信系统中,数据通常以二进制形式在设备和网络之间传输。
  • 数字逻辑电路:在数字电子学中,逻辑门(如 AND、OR、NOT 等)和触发器都是以二进制逻辑为基础构建。

2)八进制使用场景

  • 历史遗留:尽管在现代计算机系统中八进制的使用已经大大减少,但在早期计算机编程中,八进制曾用于表示文件权限(如 UnixLinux 系统中的文件权限)。
  • 简化二进制表示:由于每三位二进制数可以唯一地表示一个八进制数,因此八进制提供了一种比二进制更紧凑但比十进制更易于从二进制转换的表示方法。这在如手动计算或调试低级硬件时可能很有用。

3)十进制使用场景

  • 日常生活:十进制是我们日常生活中最常用的数制,由 0 ~ 9 十个数字符号表示,可以方便地表示大多数日常计算和财务交易。
  • 科学和工程:在科学和工程领域,十进制被广泛用于测量、计算和报告结果。

4)十六进制使用场景

  • 计算机编程:十六进制在编程中非常常见,特别是在处理内存地址、颜色代码(如网页设计中的 RGB 值)和机器语言指令时。
  • 颜色编码:在图形和网页设计中,颜色经常以十六进制形式表示。比如,在 HTML 和 CSS 中,颜色可以表示为六个十六进制数字(前两个表示红色、中间两个表示绿色、最后两个表示蓝色)。

3 进制转换的原理和算法

3.1 不同进制之间的转换规则

1)二进制与十进制的转换方法

  • 二进制转十进制:位权相加法,例如二进制数 1010 转换为十进制数,从右向左依次将二进制数的每一位与 2 的幂相乘(从 0 开始,一次递增),然后将结果相加,如下图所示。
  • 十进制转二进制:除 2 取余法,例如十进制数 10,除 2 直到商为 0 时,从下往上读取余数得到二进制数 1010,如下图所示。

2)八进制与十进制的转换方法

  • 八进制转十进制:同样依据位权原理,八进制数的每一位乘以 8 的相应幂次然后相加。
  • 十进制转八进制:除 8 取余法,直到商为 0 时,从下往上读取余数得到八进制。

3)十六进制与十进制的转换方法

  • 十六进制转十进制:十六进制数中的 A ~ F 分表表示 10 ~ 15,位权计算时同样乘以 16 的相应幂次,然后相加。
  • 十进制转十六进制:除 16 取余法,若余数大于 9 则用 A ~ F 表示,从下往上读取余数得到十六进制。

4)二进制与八进制、十六进制的转换方法

  • 二进制转八进制:每三位二进制可以转换一个八进制数,不够三位在左侧补零。
  • 二进制转十六进制:每四位二进制数可以转换一个十六进制数,不够四位左侧补零。
  • 反向转换:可以将八进制或十六进制数拆分为二进制。

3.2 算法的实现和优化

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  /**
   * 将二进制转换为十进制数字
   * @param binary
   * @returns
   */
  private binaryToDecimal(binary: string): number {
    let decimal: number = 0;
    // 通过位运算进行转换
    for (let i = 0; i < binary.length; i++) {
      decimal += parseInt(binary[i]) << (binary.length - i - 1);
    }
    return decimal;
  }

  /**
   * 十进制转二进制
   * @param decimal
   * @returns
   */
  private decimalToBinary(decimal: number): string {
    let binary = "";
    // 通过位运算进行转换
    while (decimal > 0) {
      binary = (decimal & 1) + binary;
      decimal >>= 1;
    }
    return binary;
  }

  /**
   * 八进制转十进制
   * @param octal
   * @returns
   */
  private octalToDecimal(octal: string): number {
    let decimal = 0;
    // 通过乘法运算进行转换
    for (let i = 0; i < octal.length; i++) {
      decimal += parseInt(octal[i]) * Math.pow(8, octal.length - i - 1);
    }
    return decimal;
  }

  /**
   * 将十进制数字转换为八进制字符串
   * @param decimal
   * @returns
   */
  private decimalToOctal(decimal: number): string {
    let octal: string = "";
    // 通过取余和整除运算进行转换
    while (decimal > 0) {
      octal = (decimal % 8) + octal;
      decimal = Math.floor(decimal / 8);
    }
    return octal;
  }

  /**
   * 十进制转十六进制
   * @param decimal
   * @returns
   */
  private decimalToHexadecimal(decimal: number): string {
    let hexadecimal = "";
    const hexDigits = "0123456789ABCDEF";
    // 通过取余运算进行转换
    while (decimal > 0) {
      hexadecimal = hexDigits[decimal % 16 ] + hexadecimal;
      decimal = Math.floor(decimal / 16);
    }
    return hexadecimal;
  }

  /**
   * 十六进制转十进制
   * @param hexadecimal
   * @returns
   */
  private hexadecimalToDecimal(hexadecimal: string): number {
    let decimal = 0;
    for (let i = 0; i < hexadecimal.length; i++) {
      const digit = hexadecimal[i];
      const value = parseInt(digit, 16);
      decimal += value * Math.pow(16, hexadecimal.length - i - 1);
    }
    return decimal;
  }

4 效果预览

1)二进制转八进制、十进制、十六进制

2)八进制转二进制、十进制、十六进制

3)十进制转二进制、八进制、十六进制

4)十六进制转二进制、八进制、十进制

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-08-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大前端之旅 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
数字规则:进制转换与原码、反码、补码
在计算机的数字世界里,所有信息最终都以二进制形式存储和处理。而理解原码、反码和补码这三种编码方式,是揭开计算机数值运算奥秘的关键。同时,二进制、十进制、十六进制和八进制的相互转换,也与编码的计算和应用紧密相连。本文将用通俗语言,通过大量实例,带您深入理解这三种编码的原理与应用,以及不同进制间的转换规则和使用范围。
Pocker_Spades_A
2025/06/12
1400
程序员的数学笔记1--进制转换
课程地址:https://time.geekbang.org/column/intro/143
kbsc13
2019/08/16
8940
程序员的数学笔记1--进制转换
python中进制转换任意玩儿
十进制: 0、1、2、…..8、9、10、11、12、13、14、15,16
刘金玉编程
2019/08/22
9580
【Go 基础篇】Go语言进制与进制转换:探索数据的不同表示方式
计算机科学中,进制是一种表示和处理数据的方式。在Go语言(Golang)编程中,了解进制及其转换是非常重要的基础知识。本篇博客将深入探讨Go语言中的进制表示、进制转换以及相关应用,帮助您理解如何在不同进制之间进行转换,以及如何利用进制知识处理数据。
繁依Fanyi
2023/10/12
9620
计算机基础(2)——进制与进制转换
进制也就是进位计数制,是人为定义的带进位的计数方法。 对于任何一种进制---X进制,就表示每一位置上的数运算时都是逢X进一位。十进制是逢十进一,十六进制是逢十六进一,二进制就是逢二进一,以此类推,x进制就是逢x进位。
绿水长流z
2025/01/03
2460
计算机基础(2)——进制与进制转换
【C语言】进制转换无难事:二进制、十进制、八进制与十六进制的全解析与实例
进制转换是计算机编程中常见的操作。在C语言中,了解如何在不同进制之间转换数据对于处理和显示数据非常重要。本文将详细介绍如何在二进制、十进制、八进制和十六进制之间进行转换。
LuckiBit
2024/12/11
1.7K0
二、八、十六都分不清,怎好意思说是搞计算机的?
今天,紧接着上期的进制的主题,我们一起来看看进制间的转换问题?这要都分不清楚,咋好意思说我们是做程序的呐~
程序视点
2023/10/25
3400
二、八、十六都分不清,怎好意思说是搞计算机的?
进制转换方法总结[通俗易懂]
大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说进制转换方法总结[通俗易懂],希望能够帮助大家进步!!!
Java架构师必看
2022/02/12
5.7K0
进制转换方法总结[通俗易懂]
打造一个高颜值的进制转换器
还记得计算机组成原理课上那些令人头疼的进制转换吗?二进制、八进制、十六进制…光是想想就让人头大。今天要分享的这个进制转换器,不仅功能强大,还有着精美的界面设计,让枯燥的进制转换变得有趣起来!
繁依Fanyi
2025/02/25
780
打造一个高颜值的进制转换器
【JavaSE专栏25】进制转换的那些事,十进制转R进制、R进制转十进制是什么操作?
本文对 Java 中的进制转换流程进行了介绍,讲解了十进制转R进制、R进制转十进制的操作过程,并给出了样例代码。
Designer 小郑
2023/08/02
5310
【JavaSE专栏25】进制转换的那些事,十进制转R进制、R进制转十进制是什么操作?
深入理解计算机系统(2.2)------进制间的转换原理
IT可乐
2018/01/04
1.7K0
深入理解计算机系统(2.2)------进制间的转换原理
522是十六进制的1314
优雅且充满智慧的程序员总是能在不经意间想到有趣的事情(说的正是鄙人),前两天又到了网上沸沸扬扬每年一度的520节日,相信不少人都十分的关注,没过成不要紧(正好安慰一下自己),但是如果你因为各种原因想过但是错过了的话,那么今天就分享给你一个补救的方法,那就是:522是十六进制的1314,今天照样可以是"情人节"。
闫同学
2024/06/09
2790
进制转换
众所周知,十进制才是人类可识别的最常用的数制,所以也着重对十进制到其他进制以及其他进制到十进制的转换做较为详细的讲述:
Yiiven
2022/12/15
1K0
进制转换(二进制、八进制、十进制、十六进制)涵盖整数与小数部分,超详细
先从我们最熟悉的十进制入手吧,其他进制与十进制的转换方法都是一样的,保证能全部记住!
全栈程序员站长
2022/11/02
38.9K0
Python 中的进制转换
前面诸节所用到的整数、浮点数、分数,均是“十进制”的数,这符合数学和日常生产生活的多数习惯。而计算机则不然,它使用的是二进制(参阅第1章1.2节)。从数学角度看,用于实现记数方式的进位制除了十进制、二进制之外,还有八进制、十六进制、六十进制等。同一个数字,可以用不同的进位制表示。在数学和计算机原理的资料中,会找到如何用手工的方式实现各种进位制之间的转换——这些内容不在本书范畴,此处重点介绍使用 Python 内置函数实现进制转换,并由此观察一个貌似“ bug ”的现象。
老齐
2021/09/15
2.4K0
进制转换
进制转换
Java架构师必看
2021/05/14
2.8K0
进制转换
Java 中常用进制转换
所谓进制转换,就是人们利用符号来计数的方法。进制转换由一组数码符号和两个基本因素“基数”和“位权”所构成。其中基数是指进位计数制中所采用的数码的个数,逢 n 进 1 中的 n 就是基数。而位权则指的是进位制中每一个固定位置所对应的单位制,而每一种进制中的某一个数的每位上都有一个权值 m,而且权值是位数减一,比如个位上的数的权值为 0(位数 1 - 1 = 0),而十位的权值为 1(位数 2 - 1 = 1)。
村雨遥
2022/09/19
1.2K0
Java 中常用进制转换
学会进制转换,可自创密文~
今天的主角是数制:指用一组固定的符号和统一的规则来表示数值的方法。我们日常生活中使用的数字称之为十进制;
技能锦囊
2020/04/14
1.1K0
学会进制转换,可自创密文~
探索一下进制转换 (Python 实现源码)
我们人类由十根手指头,所以自然就使用十进制啦,每当我们数数字到10之后,于是就重0 开始继续数,所以逢十进一就这么来了。
Gorit
2021/12/09
8720
探索一下进制转换 (Python 实现源码)
Python进制转换
进制转换: 进制转换是人们利用符号来计数的方法。 进制转换由一组数码符号和两个基本因素“基数”与“位权”构成。 基数是指,进位计数制中所采用的数码(数制中用来表示“量”的符号)的个数。 位权是指,进位制中每一固定位置对应的单位值。 简单转换理念: 把二进制三位一组分开就是八进制, 四位一组就是十六进制 二进制与十进制: (1)二进制转十进制:“按权展开求和” (1011)2=1x2**3 + 0x2**2 + 1x2**1 + 1x2**0=(11)10 规律:个位上的数字的次数是0,十位上的数字的次
py3study
2020/01/06
1.1K0
相关推荐
数字规则:进制转换与原码、反码、补码
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档