嵌入式-数据进制之间的转换-LMLPHP

目录

一.简介

1.1十进制

1.2二进制

1.3八进制

1.4十六进制

二.进制转换

2.1二进制-十进制转换

2.2八进制-十进制转换

2.3十六进制-十进制转换

2.4十进制-二进制转换

2.5十进制-八进制转换

2.6十进制-十六进制转换

2.7小数部分转换


一.简介

    被传入到计算机的数据要转换成0,1的二进制数据才能被计算机识别。为了方便存储,我们将数据以进制的形式存储。

    进制也就是进位计数制,是人们规定的一种带进位的计数方法

    对于任何一种进制---X进制,就表示每一位置上的数运算时都是逢X进一位。例如十进制是逢十进一,二进制是逢二进一,十六进制是逢十六进一。

    常见的数据进制包括以下几种:

  1. 十进制。十进制数是指0、1、2、3、4、5、6、7、8、9共十个数字,每逢十进一。
  2. 二进制。二进制数是指0和1两个数码,每逢二进一。
  3. 八进制。八进制数是指0、1、2、3、4、5、6、7共八个数字,每逢八进一。
  4. 十六进制。十六进制数是指0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F共十六个数字,每逢十六进一。

1.1十进制

    十进制(Decimal System)是一种计数方法,即满十进一,计数单位是101。

    十进制计数法是日常使用最多的计数方法,每相邻的两个计数单位之间的进率都为十,即10、100、1000、10000、100000、……,其计数单位为1、10、10^2、10^3、10^4、……,这些计数单位之间的进率都是10,即10^1=10、10^2=10×10=10^3、……、10^n=10×……×10=10^(n+1),以此类推。

    十进制计数法最早是由亚里士多德发现的,起因可能是因为人类有十根手指,所以每相邻的两个计数单位之间的进率都是十,这跟人类算数采用十进制可能有一定关系

1.2二进制

    二进制是由德国数理哲学大师莱布尼茨在1679年发明的,他在看了中国的《周易》之后受到启发发明了二进制,这也是今天电子计算机技术的基础。

    二进制的基数为2,每个数码只能是0和1。在二进制中,数码的进位规则是“逢二进一”,即每位二进制数的权值是2的整数次幂。

    二进制在数学和数字电路中应用非常广泛,现代的计算机和依赖计算机的设备里都使用二进制。

    二进制的计算案例:

    0011(二进制)+ 0101(二进制)= 1000(二进制)

    计算过程:

    0+0=0

    1+1=0(进位)

    1+0=1

    所以,0011+0101=1000

1.3八进制

    八进制是一种以8为基数的计数法,采用0、1、2、3、4、5、6、7八个数字,逢八进1。

    八进制在计算机领域被广泛运用,因为与二进制转换简便,同时又避免了二进制的基数大带来的许多麻烦。

    八进制数的表示方法通常以0开始,例如:0O、01、02、03、04、05、06、07等。

1.4十六进制

    十六进制是用16作为基数的计数系统 。它使用数字0-9和字母A-F(或其大写A-F)表示0到15。例如,十六进制的A表示十进制的10,B表示十进制的11,C表示十进制的12,以此类推。十六进制数通常以0x或0X开头,例如,0x1表示十六进制的1,0x1A表示十六进制的26(1×16+10×1)

二.进制转换

2.1二进制-十进制转换

    二进制向十进制转换的方法是按照二进制数的每一位乘以对应的权值(2的幂次方),然后相加得到十进制数。例如,二进制数1101转换为十进制数的计算过程为:

    1×2^3+1×2^2+0×2^1+1×2^0=8+4+0+1=13

    因此,二进制数1101转换为十进制数为13。

2.2八进制-十进制转换

    八进制转换为十进制的方法是按照八进制数的每一位乘以对应的权值(8的幂次方),然后相加得到十进制数。例如,八进制数7654转换为十进制数的计算过程为:

    7×8^3+6×8^2+5×8^1+4×8^0=4000+384+40+4=4428

    因此,八进制数7654转换为十进制数为4428。

2.3十六进制-十进制转换

    十六进制转换为十进制的方法是按照十六进制数的每一位乘以对应的权值(16的幂次方),然后相加得到十进制数。例如,十六进制数3E转换为十进制数的计算过程为:

    3×16^1+14×16^0=48+14=62

    因此,十六进制数3E转换为十进制数为62。

2.4十进制-二进制转换

    十进制转换为二进制的方法是将每一个十进制数除以2,然后将余数按从低位到高位的顺序排列,得到的数就是对应的二进制数。例如,将十进制数23转换为二进制数的过程如下:

    23 ÷ 2=11 余 1

    11 ÷ 2=5 余 1

    5 ÷ 2=2 余 1

    2 ÷ 2=1 余 0

    1 ÷ 2=0 余 1

    从下往上读取余数,得到23的二进制表示为10111。因此,十进制数23转换为二进制数为10111。

2.5十进制-八进制转换

    将一个十进制数转换为八进制同样使用除法法则,以下是一种转换方法:

    1. 选取需要转换的十进制数。

    2. 用该数除以8,得到商和余数。

    3. 将余数作为结果的最后一位。

    4. 将商作为新的十进制数,重复步骤2和3,直到商为0。

    5. 将余数按照从最后一位到第一位的顺序排列,得到转换后的八进制数。

    举例说明:

    将十进制数29转换为八进制:

    29 ÷ 8 = 3 ... 5

    3 ÷ 8 = 0 ... 3

    所以,29的八进制表示为35。

2.6十进制-十六进制转换

    下面是将十进制转换为十六进制的步骤:

    1. 将给定的十进制数除以16,得到商和余数。
    2. 如果商大于0,将商继续除以16,重复这个过程,直到商为0。
    3. 用余数来代表十六进制的数位。对于余数大于9的情况,使用A-F的字母来代表数字10-15。
    4. 将得到的余数按照从右到左的顺序排列起来,得到的就是对应的十六进制数。

    举个例子,将十进制数123转换为十六进制数:

    1. 首先,将123除以16,得到商和余数。123÷16 = 7 余 11,也就是7B。
    2. 商为7,继续除以16。7÷16 = 0 余 7,也就是07。
    3. 将得到的两个余数按照从右到左的顺序排列起来,得到最终的结果为07B。

    因此,十进制数123转换为十六进制数为07B。

2.7小数部分转换

    进制间小数部分的转换是通过不断乘以目标进制的方式进行的。

    以将十进制小数转换为二进制小数为例,首先将十进制小数乘以2,得到的整数部分即为二进制小数的第一位数。将余下的小数部分再次乘以2,得到的整数部分即为二进制小数的第二位数。依此类推,直到小数部分为0或者达到所需的精度为止。

    例如,将十进制小数0.625转换为二进制小数,过程如下:

    0.625 * 2 = 1.25,整数部分为1,余下的小数部分为0.25
    0.25 * 2 = 0.5,整数部分为0,余下的小数部分为0.5
    0.5 * 2 = 1.0,整数部分为1,小数部分为0,转换结束。

    因此,0.625的二进制表示为0.101。

    同样地,将二进制小数转换为其他进制的小数时,也是通过类似的方式进行的。不断乘以目标进制,每次得到的整数部分就是目标进制下的小数位数。

    需要注意的是,在进行进制转换时,可能存在精度丢失的问题,因为不是所有的小数都能用某个进制的有限位数精确表示。

    一个经典的进制转换中的精度丢失案例是十进制转换为二进制。在进行十进制到二进制的转换时,可能会遇到精度丢失的问题。

    举个例子,假设我们有一个十进制数值1.1,想要将其转换为二进制。首先我们将1.1乘以2,得到2.2。整数部分为2,所以我们将其记录下来。然后将小数部分0.2再乘以2,得到0.4。同样地,我们记录下整数部分0。再将小数部分0.4乘以2,得到0.8,同样记录下整数部分0。这样继续下去,直到小数部分为0或者达到我们设定的精度。

    然而,1.1在二进制中并不是一个有限的小数,它是一个循环小数,即1.1对应的二进制表示是无限循环的。在上述的转换过程中,由于计算机的存储精度限制,只能记录有限位数的二进制表示。因此,它最终会截断循环部分,导致精度丢失。

    所以,当要进行进制转换时,特别是涉及到无限循环小数的情况,可能会出现精度丢失的问题。

09-16 08:22