鱼C论坛

 找回密码
 立即注册
查看: 674|回复: 36

[扩展阅读] 深入浅出进制转换

[复制链接]
发表于 2024-5-24 18:47:33 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
深入浅出进制转换


进制转换是在编程中非常常见的操作,特别是在数据处理和底层开发中。

这里小甲鱼将深入浅出地讲解进制转换的原理和实现方法。


进制的基本概念

在计算机科学中,最常用的进制有二进制(Binary)、十进制(Decimal)、八进制(Octal)和十六进制(Hexadecimal)。它们分别使用不同的基数(Base):

  • 二进制:基数为 2,使用数字 0 和 1 表示。
  • 十进制:基数为 10,使用数字 0 到 9 表示。
  • 八进制:基数为 8,使用数字 0 到 7 表示。
  • 十六进制:基数为 16,使用数字 0 到 9 和字母 A 到 F(其中,A 表示 10,F 表示 15)。

这是什么意思呢,比如对于二进制数来说,它只有 0 和 1 两个数字。

所以,当要表示十进制的数字 3 时,对应的二进制数应该是 11。

以下是一些十进制数字及其相对应的二进制、八进制和十六进制表示:

十进制
二进制
八进制
十六进制
0
0
0
0
1
1
1
1
2
10
2
2
3
11
3
3
4
100
4
4
5
101
5
5
6
110
6
6
7
111
7
7
8
1000
10
8
9
1001
11
9
10
1010
12
A
11
1011
13
B
12
1100
14
C
13
1101
15
D
14
1110
16
E
15
1111
17
F


进制系统的基本原理

任何进制系统都是基于其基数的幂来表示数值。

十进制是基数为 10 的数制,每一位上的值是 10 的幂次倍数:

$d_{n} \times 10^{n} + d_{n-1} \times 10^(n-1) + \dots + d_{1} \times 10^{1} + d_{0} \times 10^{0}$

例如,十进制数 250,就相当于:

$2 \times 10^{2} + 5 \times 10^{1} + 0 \times 10^{0} = 250$

同样地,二进制是基数为 2 的数制,每一位上的值是 2 的幂次倍数:

$b_{n} \times 2^{n} + b_{n-1} \times 2^(n-1) + \dots + b_{1} \times 2^{1} + b_{0} \times 2^{0}$

因此,二进制数 110,就相当于:

$1 \times 2^{2} + 1 \times 2^{1} + 0 \times 2^{0}= 4 + 2 = 6$

理解进制系统的基本原理后,我们也就掌握了任何进制数转换为十进制数的方法!

这个过程的核心在于理解每个位置上的数值是基数的幂次倍数,并通过累加这些数值来得到十进制表示。


对于小数也是以此类推,比如二进制数 110.011,就相当于:

$1 \times 2^{2} + 1 \times 2^{1} + 0 \times 2^{0} + 0 \times 2^{-1} + 1 \times 2^{-2} + 1 \times 2^{-3}= 4 + 2 + 0.25 + 0.125 = 6.375$


十进制转换到其他进制的方法

十进制转二进制

在二进制数中,每一位只能是 0 或 1。

要将一个十进制数转换为二进制,我们需要确定每个二进制位上的值。

这可以通过除以 2 并求余数来实现:

  • 除以 2:将十进制数除以 2,记录商和余数。
  • 重复步骤:用商继续除以 2,直到商为 0。
  • 记录余数:将所有余数逆序排列,即为二进制表示。

示例:

将十进制数 12 转换为二进制:

  • 12 / 2 = 6……0
  • 6 / 2 = 3……0
  • 3 / 2 = 1……1
  • 1 / 2 = 0……1

结果从下往上看,因此,十进制的数字 12,对应到二进制的结果就是 1100。


对于带小数的十进制数,整数部分和小数部分需要做不同处理。

比如十进制数 6.375,整数部分不变,同样是通过除以 2 并求余数:

  • 6 / 2 = 3……0
  • 3 / 2 = 1……1
  • 1 / 2 = 0……1

得到二进制整数 110。

对于小数部分,则需要通过乘以 2,取整数部分:

  • 0.375 * 2 = 0.75 取整数部分 0
  • 0.75 * 2 = 1.5 取整数部分 1
  • 0.5 * 2 = 1.0  取整数部分 1

结果从上往下看,得到二进制小数 011。

合并后的结果是 110.011,即十进制数 6.375 转换为二进制数是 110.011。


十进制转八进制

同样的道理,对于八进制,可以通过除以 8 并求余数来实现:

  • 除以 8:将十进制数除以 8,记录商和余数。
  • 重复步骤:用商继续除以 8,直到商为 0。
  • 记录余数:将所有余数逆序排列,即为八进制表示。

示例:

  • 110 / 8 = 13……6
  • 13 / 8 = 1……5
  • 1 / 8 = 0……1

因此,十进制的数字 110,对应到二进制的结果就是 156。


十进制转十六进制

同样的道理,对于十六进制,可以通过除以 16 并求余数来实现:

  • 除以 16:将十进制数除以 16,记录商和余数。
  • 重复步骤:用商继续除以 16,直到商为 0。
  • 记录余数:将所有余数逆序排列,即为十六进制表示。

示例:

  • 250 / 16 = 15……10
  • 15 / 16 = 0……15

由于十六进制数使用 A 表示 10,使用 F 表示 15。

因此,十进制的数字 250,对应到十六进制的结果就是 FA。


评分

参与人数 1鱼币 +5 收起 理由
疯狗马德森 + 5

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-5-26 18:44:27 From FishC Mobile | 显示全部楼层
基本知识必须掌握
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-26 18:45:45 From FishC Mobile | 显示全部楼层
基本知识必须掌握
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-26 18:46:24 From FishC Mobile | 显示全部楼层
又学到新知识了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-26 18:46:48 | 显示全部楼层
基础知识小复习,yummy
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-26 18:47:18 From FishC Mobile | 显示全部楼层
基本知识必须得掌握
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-26 18:55:06 From FishC Mobile | 显示全部楼层
学习学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-26 18:59:54 From FishC Mobile | 显示全部楼层
基本知识,必须掌握
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-26 19:00:53 From FishC Mobile | 显示全部楼层
要长脑子了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-26 19:09:27 From FishC Mobile | 显示全部楼层
巩固基础知识,筑牢编程根基
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-26 19:10:49 From FishC Mobile | 显示全部楼层
基本知识一定掌握
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-26 19:12:15 From FishC Mobile | 显示全部楼层
基础知识是学习编程的根基,必须掌握运用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-26 19:23:39 | 显示全部楼层
基本知识复习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-26 19:23:56 From FishC Mobile | 显示全部楼层
这个讲的是很明白,但是用的时候就会有一些懵,甚至有很多时候会把二进制和十进制搞混
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-26 19:30:10 From FishC Mobile | 显示全部楼层
零基础学习Javac
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-26 19:35:12 From FishC Mobile | 显示全部楼层
好好学习学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-26 19:40:25 From FishC Mobile | 显示全部楼层
复习来了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-26 20:05:54 | 显示全部楼层
持续学习,每天好心情!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-26 20:05:55 From FishC Mobile | 显示全部楼层
写个c+'+程序实践一下doge,加深印象
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-26 20:21:52 From FishC Mobile | 显示全部楼层
收藏了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-21 19:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表