05 进制及进制间的转换

进制及进制间的转换

一、进制介绍

  1. 二进制:0,1;满2进1;以0B或0b开头。
  2. 十进制:0-9;满10进1。
  3. 八进制:0-7;满8进1;以数字0开头表示。
  4. 十六进制:0-9及A(10)-F(15);满16进1;以0x或0X开头表示。此处A-F不区分大小写。

二、进制的转换

1、其它进制转十进制

  • 二进制转十进制
/*
规则:从最低位(右边)开始,将每个位上的数提取出来,乘以2的(位数-1)次方,然后求和。
案例:请将0B1011转成十进制数
0B1011 = 1*2^(1-1) + 1*2^(2-1) + 0*2^(3-1) + 1*2^(4-1)
       = 1 * 1 + 1 * 2 + 0 + 1 * 8
       = 1 + 2 + 8
       = 11
*/
  • 八进制转十进制
/*
规则:从最低位(右边)开始,将每个位上的数提取出来,乘以8的(位数-1)次方,然后求和。
案例:请将0234转成十进制数
  0234 = 4*8^(1-1) + 3*8^(2-1) + 2*8^(3-1)
       = 4 * 1 + 3 * 8 + 2 * 64
       = 4 + 24 + 128
       = 156
*/
  • 十六进制转十进制
/*
规则:从最低位(右边)开始,将每个位上的数提取出来,乘以16的(位数-1)次方,然后求和。
案例:请将0x23A转成十进制数
  0x23A = 10*16^(1-1) + 3*16^(2-1) + 2*16^(3-1)
       = 10 * 1 + 3 * 16 + 2 * 256 
       = 10 + 48 + 512
       = 570
*/

2、十进制转其它进制

  • 十进制转二进制
/*
规则:将该数不断除以2,直到商为0为止,然后将每步得到的余数倒过来,就是对应的二进制。
案例:请将34转成二进制
       2| 3    4 ---- 0
       2| 1    7 ---- 1
       2|   8    ---- 0
       2|   4    ---- 0
       2|   2    ---- 0
            1 
将余数倒过来就是 : 0B100010
一个字节有8位,只得到6位,还需用2位来填充高位
————>最终为: 0B00100010

*/
  • 十进制转八进制
/*
规则:将该数不断除以8,直到商为0为止,然后将每步得到的余数倒过来,就是对应的八进制。
案例:请将131转成八进制
       8| 1 3 1  ---- 3
       8| 1    6 ---- 0
             2   
       
将余数倒过来就是 : 0203

*/
  • 十进制转十六进制
/*
规则:将该数不断除以16,直到商为0为止,然后将每步得到的余数倒过来,就是对应的十六进制。
案例:请将237转十六进制
       16| 2 3 7  ---- D
           1    4 (E)
               
       
将余数倒过来就是 : 0XED

*/

3、二进制转换成八进制、十六进制

  • 二进制转换成八进制
/*
规则:从低位开始,将二进制数每三位一组,转成对应的八进制数即可。
      每三位一组就是因为二进制的000-111就是八进制的0-7
案例:请将0b11010101转成八进制
0b  11  010  101 
11 = 1*2^(1-1)+1*2^(2-1) = 1+2 = 3
010 = 0*2^(1-1)+1*2^(2-1)+0*2^(3-1) = 2
101 = 1*2^(1-1)+0*2^(2-1)+1*2^(3-1) = 1+4 = 5

0b  11(3)  010(2)  101(5)
转换成八进制为: 0325
*/
  • 二进制转换成十六进制
/*
规则:从低位开始,将二进制数每四位一组,转成对应的十六进制数即可。
      每四位一组就是因为二进制的0000-1111就是十六进制的0-F(15)
案例:请将0b11010101转成十六进制
0b  1101  0101 
0101 = 1*2^(1-1)+0*2^(2-1)+1*2^(3-1)+0*2^(4-1) = 1+4 = 5
1101 = 1*2^(1-1)+0*2^(2-1)+1*2^(3-1)+1*2^(4-1) = 1+4+8 = 13(D)

0b  1101(D)  0101(5) 
转换成八进制为: 0xD5
*/

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

  • 八进制转换成二进制
/*
规则:将八进制数每一位,转成对应的一个3位的二进制数即可。
案例:请将0237转成二进制
    2| 7 --1
    2| 3 --1
       1
7(111)
    2| 3 --1
       1         
3(011)
    2| 2 --0
       1   
2(010)
转成二进制就是: 0B 010 011 111 
*/
  • 十六进制转换成二进制
/*
规则:将十六进制数每一位,转成对应的一个4位的二进制数即可。
案例:请将0x23B转成二进制
    2| B --1
    2| 5 --1
    2| 2 --0
       1
B(1011)
    2| 3 --1
       1         
3(0011)
    2| 2 --0
       1   
2(0010)
转成二进制就是: 0B 0010 0011 1011 
*/

本文章使用limfx的vscode插件快速发布