🗒️【计算机基础】关于进制
00 分钟
2024-3-22
2024-7-1
type
status
date
slug
summary
tags
category
icon
password
image

进制是什么 & 常见的进制

学计算机,那就肯定得懂一样东西——进制(哪怕你没有学过,多少也会懂点)
那进制是啥?
进制这玩意,说白了就是我们数数的一个方式,像啥十进制(大家都知道的)就是满十进一
那进制有啥呢?常见的进制有:
  • 十进制最常见的,对人来说最常用的
  • 二进制计算机里面用的,计算机的底层进制就是二进制,这是因为计算机是由逻辑电路组成的,而逻辑电路通常只有两个状态:开关的接通与断开,这两种状态正好可以用二进制的1和0表示。二进制是非常常见的,天生就与计算机有着紧密的关系,它正好能代表高低电平,开关的接通与断开,也与逻辑学中的真,假相吻合(布尔类型的True和False)
  • 八进制常见于计算机,经常用于简化二进制的计算,但用得也确实比较少
  • 十六进制也是计算机中经常使用的,经常用来表示存储器的地址,用得稍微比八进制多一点。八进制和十六进制只是为了简化二进制的存在的。在计算器底层中,是只能使用二进制的,但是二进制只有0和1,动不动就进位,导致二进制数的位数通常都很多,难以记录,所以经常使用八进制和十六进制来简化。
  • 为什么是十六进制和八进制来帮忙?而不是我们更加熟悉的十进制?原因很简单,十六进制的基数是16,八进制的基数是8,二进制的基数是2,十进制的基数是10。它们之中,16是2的4次方,8是2的3次方(立方),但10与2并没有什么整数次方的关系。
上面这些呢,都是我们日常能见到的进制

各个进制的特点

十进制的特点:

  • 简写:DEC
  • 特点:满十进一
  • 计数 :0、1、2、3、4、5、6、7、8、9(10、11、12…19、20…)到九了,但我们是满十进一,个位变成0,向十位进一,那下一位就是10。个位满十,向十位进一;十位满十,向百位进一……
  • 单位数字:10个(0-9)

二进制的特点:

  • 简写:BIN
  • 特点:满二进一
  • 计数:0、1(10、11、100…)到一了,但我们是满二进一,个位变成0,向十位进一,那下一位就是10。个位满二,向十位进一;十位满二,向百位进一……
  • 单位数字:2个(0、1)

八进制的特点:

  • 简写:OCT
  • 特点:满八进一
  • 计数:0、1、2、3、4、5、6、7、(10、11、12…)到七了,但我们是满八进一,个位变成0,向十位进一,那下一位就是10。个位满八,向十位进一;十位满八,向百位进一……
  • 单位数字:8个(0-7)

十六进制的特点

  • 简写:HEX
  • 特点:满十六进一
  • 计数:0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F(10、11、12……1A、1B)到9了,之后的数字不能是像10、11一样的两位数,所以之后的数字以A-F代替10-15。
  • 单位数字:16个(0-F)

十进制与任意进制之间的互相转换

十进制转任意进制:

十进制转任意进制通常采用除基数,倒取余的办法,具体做法就是:把要转换的数除目标进制数的基数,直到整数变为0为止(下面以43转二进制为例)
43整除2,得21,余1
21整除2,得10,余1
10整除2,得5,余0
5整除2,得2,余1
2整除2,得1,余0
1整除2,得0,余1
把余数从下往上进行记录,得:101011
即43(10) =101011(2)
其它数,其它进制同理,只是十六进制要记得用A-F替换10-15

任意进制转十进制:

任意进制转十进制,一般用把二进制数按权展开、再相加的办法,举个例子(101011转十进制)
1*2^5 + 0*2^4 + 1*2^3 + 0*2^2 + 1*2^1 + 1*2^0
=32 + 0 + 8 + 0 + 2 + 1
=43
即:101011(2) = 43(10)
其它数,其它进制同理,只是十六进制要记得先把A-F替换成相应的10-15,再参与运算

十进制转任意进制(小数)

十进制小数转换成二进制小数采用 “乘2取整,顺序排列”法。下面以十进制转二进制(小数)为例:
具体做法是:先将整数部分与小数部分分开,整数部分直接转换成二进制数,小数部分的转换办法是:用2乘十进制小数,可以得到积,将积的整数部分取出,再用2乘余下的小数部分,又得到一个积,再将积的整数部分取出,如此进行,直到积中的小数部分为零,或者达到所要求的精度为止。(原因是:有很多小数转换成二进制是无限小数,只能取舍,所以一般会设定一个精度,达到精度后就停止计算。)
例如(5.625转为二进制):
分成5、0.625
5转换成二进制是:101,先放一边
0.625*2 = 1.25,取整为1
0.25*2 = 0.5,取整为0
0.5*2 = 1,取整为1
顺着取整,得101
所以0.625(10) = 0.101(2)
所以5.625(10) = 101.625(2)
如果小数部分怎么乘都不为0的话,那就按之前规定的,算到精度要求为止。
例如:0.56转换为二进制(保留小数点后5位)
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.56(10) ≈ 0.10001(2)

任意进制转十进制(小数):

还是以二进制为例,二进制的小数转换为十进制主要是乘以2的负次方,从小数点后开始,依次乘以2的负一次方,2的负二次方,2的负三次方等。比如:0.101转换为十进制:
1*2^-1 + 0*2^-2 + 1*2^-3
=½ + 0 + 1/8
=0.625
所以,0.101(2) = 0.625(10)

进制转换的算法实现(Python)


评论