技术

进制转换

教一位朋友学进制转换时的一些笔记

  • #Math
  • #Code
  • #进制转换
  • #数学
  • #笔记
  • #学习
本文目录(11)
  1. 进制表示法
  2. n进制计数法
  3. 多个数位的产生
  4. 通用一些的表示
  5. 通用表示(按权展开)
  6. 转换为十进制
  7. 转换为任意进制
  8. 进制转换
  9. 转换为十进制
  10. 转换为n进制
  11. 二、八、十六进制的转换

进制表示法

计数时为了方便表示大的数量,因此采用进制表示法计数。

n进制计数法

nn 进制计数法 代表的意思有:

  1. 数到第 nn 个数就进位(如:0, 1, 2, 3, 4, 5, 6, 7, 8, 9,9是第十个数,数下一个数时就会进一位,即10。)
  2. 一共只有 nn 个不同的符号(比如十进制只有0到9,共10个数字。二进制只有0和1,共2个数字。)
  3. 一个数位上的数字可以选取 nn 个值,例如某个十进制表示数的个位可能取0到9这十个种的任意一个,有10种可能。 因此,一个n进制表示数如果有1位,则有 nn 种可能。有2位,则有 n×n=n2n \times n = n^2 种可能,以此类推,如果有 xx 位,则有 n×n×......×n=nxn \times n \times ...... \times n = n^x 种可能。 也即,xx 位的 nn 进制表示数一共可以表示 nxn^x 个数。比如一个2位的10进制数,可以表示从0到99一共100 (102=10010^2=100)个数,一个4位的2进制数,可以表示从0到 1111 共 16 (24=162^4=16)个数。

多个数位的产生

在计数时,满了n就进一位,意思是着这时一位能表示的数字已经表示完了(n进制的n个数字已经用完了),所以才会 多用一位 来表达。比如数某个东西的数量,使用十进制,先用一位数,数到9时,已经不能表示更多了,所以多加一位来表示,这时就会进位,变成一个2位数 10。这时继续计数,到19时,个位又不能表示更多了,于是继续进位,变成20。当数到99时,这时个位不能表示更多,发生进位,十位也不能表示更多,于是继续进位,此时就会有三位的数字了。

通用一些的表示

可以看出来,一位数每一位表示1个数字,一共能表示10个数字,而两位数中的十位是个位表示完它能表示的十个数字之后进位产生的,因此一个两位数的十位表示10个数字。比如一个两位数63,它表示的实际数量是6×10+36\times{10}+3。 这里的 “个位十位” 的称呼是十进制专属的,对于所有进制表示法,一般用 “第0位,第1位” 表示。同时,每一位数字的值用 d0,d1,...d_0, d_1, ...表示。 例如,十进制数字 234234 的第0位数字 d0=4d_0=4,第一位数字 d1=3d_1=3,第二位数字 d2=2d_2=2

以此类推,n进制表示法中,第0位数字表示的实际数量d0d_0,第1位数字表示的实际数量d1×nd_1 \times{n} ,第2位数字表示的实际数量d2×n×nd_2\times{n}\times{n}

通用表示(按权展开)

现在得到通用的表示,在 nn 进制表示法中,用 DD 表示一个数字表示的实际数量,则对于任意一个 mm 位的数字来说,都有:

D=dm×nm+dm1×nm1++d2×n2+d1×n1+d0×n0D = d_m\times{n^m} + d_{m-1}\times{n^{m-1}} + \dots + d_2\times{n^{2}} + d_1\times{n^{1}} + d_0\times{n^0}

因为我们是使用十进制进行计数的,我们使用的加法和乘法以及乘方都是十进制的,包括上面这个通用表示在描述时也是使用十进制表示实际数量的。

转换为十进制

所以对于任何一个n进制数,带入该通用表示 即可得到它表示的 十进制数的实际数量

转换为任意进制

如果我们在这个通用表示中使用的是n进制,那我们只要使用n进制的数字表示,加法,乘法和乘方,那么我们只要带入该通用表示,就可以得到任何表示法表示的n进制数的实际数量

进制转换

转换为十进制

因为我们使用的就是十进制,所以先学习通用表示法转换为十进制

二进制转换为十进制

二进制100111 转十进制39:

D=1×25+0×24+0×23+1×22+1×21+1×20=32+0+0+4+2+1=3910D= 1 \times 2^5 + 0 \times 2^4 + 0 \times 2^3 + 1 \times 2^2 + 1 \times 2^1 + 1 \times 2^0 = 32 + 0 + 0 + 4 + 2 + 1 = 39_{10}

​ #八进制转换为十进制

八进制124 转十进制84:

D=1×82+2×81+4×80=64+16+4=8410D = 1 \times 8^2 + 2 \times 8^1 + 4 \times 8^0 = 64 + 16 + 4 = 84_{10}

十六进制转换为十进制

十六进制3E8₁₆ 转十进制1000:

D=3×162+14×161+8×160=768+224+8=100010D = 3 \times 16^2 + 14 \times 16^1 + 8 \times 16^0 = 768 + 224 + 8 = 1000_{10}

转换为n进制

这里首先介绍使用的是 通用表示法,假设我们要将 n 进制数转换 m 进制数,为使用通用表示法,首先要求 我们能把n进制表示法的n个数字以及这个n,用m进制表示(比如十进制转换为二进制时,需要知道0到10的二进制表示)。

不要问为什么十进制表示法没这个要求,因为我们已经能把二进制,八进制,十六进制以及许多其他进制用十进制数字表示了 0v0 。回头看看上方通用表示法下面的 #转换为任意进制 的说明。

Tips: n进制的乘法可以使用竖式计算(各位相乘,各行累加,进位)

以下为一个通用表示法的示例,由于要转换为m进制,就要学习n进制的乘法对于人来说比较麻烦,因此只做演示。 但对于常用的 二进制和十进制的转换 来说,已经足够了。

十进制转换为二进制

通用表示法(按权展开)

十进制数39转换为二进制100111(0到10的二进制表示在文尾):

3910=32+4+2+1=25+22+21+20=100111239_{10} = 32 + 4 + 2 + 1 = 2^5 + 2^2 + 2^1 + 2^0 = 100111_2

另一种十进制转换为二进制的方法是 除以2取余法,即十进制数除以2,然后取其余数(只可能是1或0)作为低位,逐步相除排列直到商为0时停止。

除以2取余法

还是十进制数39

39÷2=19139 \div 2 = 19 \dots 1 19÷2=9119 \div 2 = 9 \dots 1 9÷2=419 \div 2 = 4 \dots 1 4÷2=204 \div 2 = 2 \dots 0 2÷2=102 \div 2 = 1 \dots 0 1÷2=011 \div 2 = 0 \dots 1

排列余数,得100111

二、八、十六进制的转换

很显然 8 和 16 分别是 23,242^3, 2^4,结合前面所说的,可以知道八进制的一位可以表示的实际数量需要二进制的三位来表示,十六进制的一位则需要用二进制的四位来表示。因此它们可以很方便地与二进制互相转换。

这种方便在于,碰到比较长的数字时,转换起来比十进制的转换更快更 解压

二进制与十六进制

因为1位十六进制需要用4位二进制表示,当你大概记得一些十六进制数字的二进制表示时,你会很快地得到转换结果。 比如:

二进制10 1001 0111 1010 1011转换为十六进制:冒号后面没啥步骤了,直接按顺序写出来是 297AB

十六进制3F8A转换为二进制:11 1111 1000 1010

八进制也是同理。

二进制与十六进制转换表

二进制 (4-bit)十六进制 (Hex)十进制 (Dec)
000000
000111
001022
001133
010044
010155
011066
011177
100088
100199
1010A10
1011B11
1100C12
1101D13
1110E14
1111F15

评论

由 GitHub Discussions 提供

滚动到文章底部附近时加载评论区。