进制的转换

来源:互联网 发布:网络举报查询系统 编辑:程序博客网 时间:2024/06/04 17:40

最近在弄蓝牙BLE的项目,用到了进制,以前也学过进制,但每次使用的时候还是要去查资料,记也没记住,所以决定写一篇博客,要用的时候直接查。好记忆不如烂笔头

 

首先来个十进制和二进制,毕竟接触的最早

 

十进制:用数字表示0123456789

二进制:用数字表示01;

 

十进制转换为二进制:

一个十进制数,分为整数部分和小数部分,如:1234567.89

 

下面来举一个列子:

98转换为二进制

98/2 = 49........0

49/2 = 24........1

24/2 = 12........0

12/2 = 6.........0

6/2 = 3...........0

3/2 = 1 ...........0

1/2= 0 ...........1

转换成的二进制为(从后往前读) 1000010;

计算方法:每次将整数部分除以2,得到余数, 从后面往前面获取;

 

 

小数部分转换为二进制:

小数部分乘以2,取整数,剩下的小数部分继续乘以2,一直到小数部分为0为止。。。如果小数部分一直不为0,则按照四舍五入的法则,根据后面一位是0还是1,取舍,如果是零,舍掉,如果是1,向入一位。换句话说就是0舍1入。

 

比如0.255;

0.255 * 2 = 0.51;         ------0

0.51 *2 = 1.02;           ------1

0.02 *2 =0.04;            -----0

0.04*2 = 0.08;            -----0

0.08 * 2 = 0.16;          -----0

0.16 *2 = 0.32;          ------0

0.32 *2 = 0.64;           -----0

0.64*2=1.28;             ------1

0.28 *2=0.56;           -------0

0.56 *2  =1.12;         -------1

0.12*2 = 0.24;           ------0

0.24*2 = 0.48;           ------0

0.48*2 = 0.96;           ------0

0.96*2 = 1.92;          -------1

0.92*2=1.84;            -------1

0.84*2 =1.68;            -------1

//这里我写的够长了,这里就这样了吧

二进制(从前往后读)0.

即是:0.01000001       (后面的我舍弃了,0舍弃,1向前进一位)

 

合并整数和小数

十进制转换为二进制

98.25

98.25转换二进制1000010.01000001;

 

---------------------------老子是一条分割线

二进制转换为十进制:

方法:按权重相加法,即二进制每位上的数乘以权重,然后相加之和即是十进制数

比如二进制数1101:    1*2^0 + 0*2^1 + 1*2^2 + 1*2^3=

转换为十进制           1    + 0     +  4      +  8 = 13;

 

小数转换为十进制:    0.0111;

0 *2^-1   +1 *2^-2 + 1*2^-3 +1*2^-4 =

0          +1/4 +1/8 +1/16 = 0.4375

 

 

整数和小数:

1101.0111 = 13.4375;

 

 

 

 

 

 

十进制和八进制的转换

十进制:0123456789

八进制:01234567

可以类似于十进制转二进制

整数部分;除8取余法,小数部分,剩义8取整数

一直取到小数部分为零为止。如果永远不能为零,就同十进制数的四舍五入一样,暂取个名字叫3舍4入。

796转换为八进制

796/8=99        .....4

99/8 = 12       ......3

12/8 = 1     ..........4

1/8 = 0 ..............1

转为八进制为1434

 

小数0.703125

0.70315 * 8 = 5.625 ---5

0.625  *8 = 5.0     ---5

十进制:0.55

 

整数和小数:

796.703125

1434.55

 

 

八进制转换为十进制:

1434.55

1434

4*8^0   +3 *8^1 + 4 *8^2 + 1* 8^3 =

4       + 24    +256     +  512 = 796

 

 

小数部分

0.0703125

0*8^-1 + 7*8^-2 + 0*8^-3 + 3* 8^-4 + 1*8^-5 + 1*8^-6 + 2*8^-7 + 5*8^-8=

 

 

十进制转换为十六进制

十进制:0123456789

十六进制:0123456789ABCDEF

类似于十进制转换二进制和十进制转换为八进制

 

十进制转为16进制(整数除以16):

91.876

 

91

91/16 = 5........11

5/16 = 0.........5

91转换为十六进制5B

0.876转为16进制

0.876*16 = 14.016     ------14

0.016 * 16 = 0.256        ---0

0.256 * 16 = 4.096      -----4

转换后的十六进制0.E04

 

91.867转换为十六进制为5B.E04

 

 

 

16进制转换为10进制

2a转换为十进制

A * 16^0 + 2 * 16^1 = 42

 

0.5b转换为十进制

5*16^-1 + 11 *16^-2 =

0.3125 +0.04296875 =

 

 

 

二进制转换为8进制

 

· 需要了解一个数学关系,即2^3=8,2^4=16,而八进制和十六进制是用这关系衍生而来的,即用三位二进制表示一位八进制,用四位二进制表示一位十六进制数。

· 接着,记住4个数字8、4、2、1(2^3=8、2^2=4、2^1=2、2^0=1)。现在我们来练习二进制与八进制之间的转换。这段话来自简书的一篇博文:http://www.jianshu.com/p/555cd32e99cc希望大家也去看看原文,我也是看这篇博文学的进制转换

 

二进制转换为8进制

·  方法:取三合一法,即从二进制的小数点为分界点,向左(向右)每三位取成一位,接着将这三位二进制按权相加,得到的数就是一位八位二进制数,然后,按顺序进行排列,小数点的位置不变,得到的数字就是我们所求的八进制数。

·  如果向左(向右)取三位后,取到最高(最低)位时候,如果无法凑足三位,可以在小数点最左边(最右边),即整数的最高位(最低位)添0,凑足三位。

·  

作者:MPPC
链接:http://www.jianshu.com/p/555cd32e99cc
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 

 

二进制

11 011.101 111

 

011 011.101 111

整数部分      =33

1*2^0 + 1*2^1 + 0*2^2  =  3

1      + 2     + 0

 1*2^0 + 1*2^1 + 0*2^2 =  3

1      +2     + 0     =

小数部分             =0.57

1*2^0 + 0*2^1 + 1*2^2  = 5

1 + 0 + 4

1*2^0 + 1*2^1 + 1*2^2 =  7

1     +2    + 4 =

011 011.101 111转换为八进制33.57

 

 

八进制转换为二进制

33.57

 

取一分三法,即将一位八进制数分解成三位二进制数,用三位二进制按权相加去凑这位八进制数,小数点位置照旧。

先来看看二进制的规律 111      1*2^0  + 1*2^1 + 1*2 ^2 = 1 + 2 + 4也就是如果数不为0,而为1的时候,则乘以权重可以 等于      

0位    1

2位     2

3位     4

33.57       

3 ======011

3=======011

5======101

7=======111  

所以八进制转换为8进制为  11 011.101 111

 

二进制与16进制的转换

与二进制与八进制转换相似,只不过是一位(十六)与四位(二进制)的转换

111101110111

00 11  1101,1101 1100

1*2^0 +1*2^1 + 0*2^2 +0*2^3 = 

1  +2     +0 +0   =3

×2^0  +0*2^1 + 1*2^2 +1×2^3  = 

1   + 0 +  4 +8 = 13

整数:3D

小数

1*2^0 +0*2^1 + 1*2^2+ 1*2^3 = 13

1     + 0  +  4    + 8 =

0*2^0 + 0^2^1 + 1*2^2 + 1*2^3 =

0   + 0     +  4    +  8 =  12

小数部分转换为十六进制:DC

111101110111

转换为十六进制等于3D.DC

 

 

十六进制转换为2进制

1111 = 1*2^0 + 1*2^1 + 1*2^2 + 1*2^3  =    1   +   2       +4      +8

取一分四法,即将一位十六进制数分解成四位二进制数,用四位二进制按权相加去凑这位十六进制数,小数点位置照旧。

3D.DC

3 =======>11

D=======>1101

 

D======>1101

C=====>11

 

则二进制为:111101,110111

 

 

 

 

 如果有错误,欢迎告知QQ2235577382,谢谢

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

原创粉丝点击