# 二进制与十进制

# 1. 十进制基本概念

145 ,被理解为 “一百四十五” ,但是 145 并不是一个 “” ,而只是一个数的代码,是这个数的 “书写方式” 。

三、叁、three、3、|||、III、***、 丙、等等很多书写方式,其实都可以表达同样的数学上的数字概念。

阿拉伯数字用 10 ,而罗马数字用 X ,来表达同一个数学概念。

我们所说的 “一百四十五” ,其实只是一种表达方式:阿拉伯式的表达,也即使十进制。

# 2. 十进制规则总结

归纳起来:

  • 十进制数使用数字 0 ~ 9 ;
  • 每一位的 “权” 是 10n10^n
  • 用两位数可表示的最大数为 99 。也就是说,用 n 位数表示的范围是:0 ... n 个 9。共 10 的 n 次方个。

十进制的普及不是偶然的,但是我们可以使用不同的进制。

注意

进制不同,只是书写效果的不同。不同的书写方式,可以表达同一个 “数” 的数学概念。

# 3. 进制规则的推广

按照十进制中总结的数学规则,可以这样描述 八进制

  • 可用的数字为 0 ~ 7;
  • 各位的权是8n8^n808^0818^1828^2838^3848^4 等。
  • 用两位数可表示的最大数为 77 。也就是说,用 n 位八进制数表示的范围是:0 ... n 个 7,共 8n8^n 个。

练习

描述六进、七进制和九进制。

十进制

位数 第4位 第3位 第2位 第1位
位权 10310^3 10210^2 10110^1 10010^0
1000 100 10 1

七进制

第4位 第3位 第2位 第1位
位权 737^3 727^2 717^1 707^0
等价十进制 343 49 7 1

# 4. 重点结论

同样的书写方式 200

  • 十进制表示的数值是 2 个 100,而
  • 七进制表示的数值 2 个 49

为了表达 50 这个数值:

  • 十进制的书写格式是 50 ,而
  • 七进制的书写格式是 101 ,
  • 八进制的书写方式是 62

所以:

  • 在不同的进制之间,同样的『书写方式』表达的数学值并不一样

  • 而要表达同样的数学值,『书写方式』是不一样的

# 5. 二进制

二进制是这一概念推广的最终产物。

第8位 第7位 第6位 第5位 第4位 第3位 第2位 第位
位权 272^7 262^6 252^5 242^4 232^3 222^2 212^1 202^0
等价十进制 128 64 32 16 8 4 2 1

计算机根本不认识字母、数字、指令或程序,在它的内部只是一些电路,某个电路的节点上要么有很多电,要么几乎没有电。

在硬件上,硬件工程师不太容易表示:少点电 - 一些点 - 较多电- 许多电 - 大量电 这样的多状态。 反而很容易也更稳妥地实现:有电 - 没电 的两状态。所以二进制的本质就是:用 1 和 0 可以代表每一段电路的真实状态。

因为早期的计算机一次处理 8 位,所以很自然的将 8 位大小的长度称为 字节

用 8 位二进制数可以表示 256 个不同的值。如果 8 位都为 1,则对应的十进制值是 255;如果 8 为都是 0,则对应的十进制值是 0,从 0~255 一共有 256 种可能的状态(数据)。

  • 1 byte = 8 bit

  • 1 KB = 2102^{10} byte

  • 1 MB = 2102^{10} KB = 2202^{20} byte

  • 1 GB = 2102^{10} MB = 2202^{20} KB = 2302^{30} byte

2102^{10} = 1024

# 6. 十六进制

因为二进制数难于阅读,于是人们想出了一种更为简单的方式来表达相同的值。 从二进制转换成十进制设计到大量的数的操作,但是从二进制转换成十六进制就很简单。

十六进制中有十六个数字:0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f:

  • 用 a 表示比 9 大 1 的数,其值相当于十进制中的 10 ;
  • 用 b 表示比 a 大 1 的数,其值相当于十进制中的 11 ;
  • 用 c 表示比 b 大 1 的数,其值相当于十进制中的 12 ;
  • 用 d 表示比 c 大 1 的数,其值相当于十进制中的 13 ;
  • 用 e 表示比 d 大 1 的数,其值相当于十进制中的 14 ;
  • 用 f 表示比 e 大 1 的数,其值相当于十进制中的 15 。

也就是说,有些数学概念上的数值,十进制中需要用两位数表示,但是十六进制用一位数就能表示

第4位 第3位 第2位 第1位
位权 16316^3 16216^2 16116^1 16016^0
等价十进制 4096 256 16 1

诀窍:一个字节中的 8 位 2 进制数,分成两组 4 位,正好每一组 4 位二进制数等价于 1 位十六进制数。