不同进制数之间的相互转换(全面解析版)

目录

前言

1.不同进制的表示方法

2.不同进制之间的对照

 3.二进制数转换为其他进制数

3.1二进制数转换为八进制数

3.2任意进制数转换为十进制数

3.3二进制数转换为十六进制数

4.其他进制数转换为二进制数

4.1八进制数转换为二进制数

4.2十进制数转换为任意进制数

4.3十六进制数转换为二进制数

总结


前言

十六进制:(简写为 hex 或下标 16)是一种基数为 16 的计数系统,是一种逢 16 进 1 的进位制。通常用数字 0、1、2、3、4、5、6、7、8、9 和字母 A、B、C、D、E、F(a、b、c、d、e、f)表示,其中: A~F 表示 10~15,这些称作十六进制数字。

十进制数:是组成以10为基础的数字系统,有 0,1,2,3, 4, 5, 6, 7, 8, 9 十个基本数字组成。十进制,英文名称为 Decimal System,来源于希腊文 Decem,意为十。十进制计数是由印度教教徒在 1500 年前发明的,由阿拉伯人传承至 11 世纪。

八进制:Octal,缩写 OCT 或 O,一种以 8 为基数的计数法,采用 0,1,2,3,4,5,6,7 八个数字,逢八进 1。一些编程语言中常常以数字 0 开始表明该数字是八进制。八进制的数和二进制数可以按位对应(八进制一位对应二进制三位),因此常应用在计算机语言中。

二进制:是计算技术中广泛采用的一种数制。 二进制数据是用 0 和 1 两个数码来表示的数。 它的基数为2,进位规则是"逢二进一",借位规则是"借一当二"。 二进制数(binaries)是逢2进位的进位制,0、1是基本算符 ;计算机运算基础采用二进制。

1.不同进制的表示方法

进制 范围 前缀 后缀

二进制(Binary)

0~1 0b/0B b/B
八进制(Octal) 0~7 0 o/O
十进制(Decimal) 0~9 无,可加+/- d/D
十六进制(Hexadecimal) 0~9;A~F(10~15) 0x/0X h/H

例如:

进制 前缀表示法 后缀表示法

二进制

0b10000000000 10000000000B
八进制 02000 2000O
十进制 1024 1024D(后缀可加可不加)
十六进制 0x400 400H

注意事项

  1. 十六进制中的A~F分别表示数字10~15;
  2. 在十六进制表示法中,字母"A~F"可以用大写或小写字母来表示。
  3. 对于大部分编程语言和计算机系统来说,习惯上使用大写字母来表示十六进制中的"A~F",但也可以使用小写字母"a~f"来表示。两者都是有效的,但需要注意保持一致以避免混淆。
  4. 在写代码的时候,不同的语言甚至是于不同的编程软件对前后缀的识别可能有所不同,C/C++一般使用前缀表示,后缀书写可能出现报错;

2.不同进制之间的对照

 3.二进制数转换为其他进制数

3.1二进制数转换为八进制数

  1. 对于一个二进制混合数(既包含整数部分,又包含小数部分),在转换时应以小数点为界。
  2. 其整数部分,从小数点开始往左数,将一串二进制数分为3位(八进制)一组,在数的最左边可根据需要加“0”补齐;
  3. 对于小数部分,从小数点开始往右数,也将一串二进制数分为 3 位一组,在数的最右边也可根据需要加“0”补齐。
  4. 最终使总的位数为3的整数倍,然后分别用对应的八进制数取代。

【例】

2⁸ 2⁷ 2⁶ 2⁵ 2⁴ 2⁰
256 128 64 32 16 8 4 2 1

将每一组的三位分别对照上面这个表格相加得出数值,拼接一起即可,这样说可能不太明白,我列举个表格供大家参考:

二进制对照表 计算过程 结果
256 128 64 32 16 8 4 2 1
0 0 1 1 1
1 1 1 1+1×2+1×4 7
0 0 0 0 0
0 1 0 1×2 2
. . . . .
0 1 1 1×1+1×2 3
0 1 0 1×2 2

然后从上往下写就是结果(1702.32)₈;可能我叙述的比较麻烦,但是当你写起来是很简单的,我只是叙述的比较清楚,实际上以上的步骤心算即可;

3.2任意进制数转换为十进制数

按权展开相加法 (这种方式适用于任意进制数转换为十进制数)

将任意进制数的各位数码与它们的权值相乘,再把乘积相加,就得到了一个十进制数。这种方法称为按权展开相加法

【例】:(任意进制数转换为十进制数)

(11011.1)₂ = 1×2⁴ + 1×2³ + 0×2² + 1×2¹ + 1×2⁰ + 1×2⁻¹ = 27.5

(11011.1)₈ = 1×8⁴ + 1×8³ + 0×8² + 1×8¹ + 1×8⁰ + 1×8⁻¹ = 4617.125

(11011.1)₁₆ = 1×16⁴ + 1×16³ + 0×16² + 1×16¹ + 1×16⁰ + 1×16⁻¹ = 69649.0625 

3.3二进制数转换为十六进制数

  1. 对于一个二进制混合数(既包含整数部分,又包含小数部分),在转换时应以小数点为界。
  2. 其整数部分,从小数点开始往左数,将一串二进制数分为 4 位(十六进制)一组,在数的最左边可根据需要加“0”补齐;
  3. 对于小数部分,从小数点开始往右数,也将一串二进制数分为 4 位一组,在数的最右边也可根据需要加“0”补齐。
  4. 最终使总的位数为 4 的整数倍,然后分别用对应的十六进制数取代。

 二进制数转换为十六进制数跟转换为八进制的做法基本上一模一样,唯一的区别在于,十六进制是以4位一组;

二进制对照表 计算过程 结果
256 128 64 32 16 8 4 2 1
0 0 1 1 1×1+1×2 3
1 1 0 0 1×8+1×4 12(C)
0 0 1 0 1×2 2
. . . . . .
0 1 1 0 1×4+1×2 6
1 0 0 0 1×8 8

然后从上往下写就是(3C2.68)₁₆ ;注意十六进制的特性,结果中的12不要直接写成12,为了与10进制区分,一定要写成其对应的字母

4.其他进制数转换为二进制数

4.1八进制数转换为二进制数

八进制数转换为二进制数有两种方法可用;

方法一:连续转换法;

将八进制数使用按权展开相加法转换为十进制数,然后再由十进制数转化为二进制数

方法二:倒推法;

根据二进制数转换为八进制数,反推八进制数转换为二进制数;

【例】:

求八进制 24.24 的二进制数:

结果 二进制对照表
256 128 64 32 16 8 4 2 1
2 0 1 0
4 1 0 0
. . . .
2 0 1 0
4 1 0 0

 将得到的二进制位从上向下拼接即可:(24.24)₈ = (10100.0101)₂

4.2十进制数转换为任意进制数

一个十进制数转换为任意进制数,通常采用基数乘除法

这种转换方法对十进制数的整数部分和小数部分将分别进行处理,对整数部分采用除基取余法,对小数部分采用乘基取整法,最后将整数部分与小数部分的转换结果拼接起来。

】:将十进制数 123.6875 转换成二进制数。

除基取余法(整数部分):整数部分除基取余,最先取得的余数为数的最低位,最后取得的余数为数的最高位(即除基取余,先余为低,后余为高),商为0时结束。

整数部分:

因此整数部分 123=(1111011)₂。

乘基取整法(小数部分):小数部分乘基取整,最先取得的整数为数的最高位,最后取得的整数为数的最低位(即乘基取整,先整为高,后整为低),乘积为1.0(或满足精度要求)时结束。

小数部分:

 因此小数部分 0.6875=(0.1011)₂,所以 123.6875=(1111011.1011)₂。

4.3十六进制数转换为二进制数

十六进制数转换为二进制数有两种方法可用;

方法一:连续转换法;

将十六进制数使用按权展开相加法转换为十进制数,然后再由十进制数转化为二进制数

方法二:倒推法;

根据二进制数转换为十六进制数,反推十六进制数转换为二进制数;

【例】:

求十六进制 24.24 的二进制数:

结果 二进制对照表
256 128 64 32 16 8 4 2 1
2 0 0 1 0
4 0 1 0 0
. . . .
2 0 0 1 0
4 0 1 0 0

将得到的二进制位从上向下拼接即可:(24.24)₁₆= (100100.001001)₂

总结

  1. 使用进制前后缀可以帮助我们更清楚地理解数字的表示方式,避免混淆不同进制数的意义。
  2. 同时在计算机编程中,前后缀也有助于指示数字表示的进制,从而避免错误或误解。
  3. 关于十进制数转换为任意进制数为何采用除基取余法乘基取整法,以及所取之数放置位置的原理,请结合 r 进制数的数值表示公式思考,而不应死记硬背。
  4. 在计算机中,小数和整数不一样,整数可以连续表示,但小数是离散的,所以并不是每个十进制小数都可以准确地用二进制表示。例如 0.3,无论经过多少次乘二取整转换都无法得到精确的结果。但任意一个二进制小数都可以用十进制小数表示,希望读者引起重视。

相关推荐

  1. matlab实现单精度、16之间转换函数

    2024-06-13 14:32:01       58 阅读
  2. C语言中各之间转换

    2024-06-13 14:32:01       31 阅读
  3. 相关

    2024-06-13 14:32:01       28 阅读
  4. C语言- %i 读取不同

    2024-06-13 14:32:01       36 阅读
  5. Python转换

    2024-06-13 14:32:01       56 阅读
  6. 组和List之间相互转换

    2024-06-13 14:32:01       49 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-13 14:32:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-13 14:32:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-06-13 14:32:01       82 阅读
  4. Python语言-面向对象

    2024-06-13 14:32:01       91 阅读

热门阅读

  1. python迁移数据教程

    2024-06-13 14:32:01       31 阅读
  2. Spring (55)Spring Boot的测试支持

    2024-06-13 14:32:01       38 阅读
  3. SHELL脚本学习(七) 脚本控制(2)

    2024-06-13 14:32:01       30 阅读
  4. cpp 哈希表 unordered_map

    2024-06-13 14:32:01       34 阅读
  5. 程序员的婚后生活是如何走向一地鸡毛的?

    2024-06-13 14:32:01       37 阅读
  6. 交易积累-世界著名的游戏框架

    2024-06-13 14:32:01       33 阅读
  7. React state 执行时机

    2024-06-13 14:32:01       28 阅读
  8. SpringCloud专题

    2024-06-13 14:32:01       33 阅读
  9. Stream

    Stream

    2024-06-13 14:32:01      31 阅读
  10. MySQL为何不支持函数索引的使用

    2024-06-13 14:32:01       27 阅读