# 【计算机基础】关于进制

# 进制是什么 & 常见的进制

学计算机,那就肯定得懂一样东西 —— 进制(哪怕你没有学过,多少也会懂点)

那进制是啥?

进制也就是进位计数制,是人为定义的带进位的计数方法(有不带进位的计数方法,比如原始的结绳计数法,唱票时常用的 “正” 字计数法,以及类似的 tally mark 计数)。 对于任何一种进制 —X 进制,就表示每一位置上的数运算时都是逢 X 进一位。 十进制是逢十进一,十六进制是逢十六进一,二进制就是逢二进一,以此类推,x 进制就是逢 x 进位。

百度百科

进制这玩意,说白了就是我们数数的一个方式,像啥十进制(大家都知道的)就是满十进一

那进制有啥呢?常见的进制有:

  • 十进制最常见的,对人来说最常用的
  • 二进制计算机里面用的,计算机的底层进制就是二进制,这是因为计算机是由逻辑电路组成的,而逻辑电路通常只有两个状态:开关的接通与断开,这两种状态正好可以用二进制的 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 转十进制)

12^5 + 02^4 + 12^3 + 02^2 + 12^1 + 12^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 转换为十进制:

12^-1 + 02^-2 + 1*2^-3

=½ + 0 + 1/8

=0.625

所以,0.101 (2) = 0.625 (10)

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

Python 200 行代码实现任意进制与十进制之间的互相转化 - Abyss - 博客

此文章已被阅读次数:正在加载...更新于

请我喝[茶]~( ̄▽ ̄)~*

茗辰原 微信支付

微信支付

茗辰原 支付宝

支付宝