众所周知,计算机内部采用二进制来表示和处理数据。这是因为很多理想的物理介质,状态都有二元特性。
- 磁性物质:有磁性,或无磁性;
- 电压:高电压,或低电压;
- 灯泡:亮,或不亮;
由于这样显著的二元特征,采用二进制数系统,也就不奇怪了。在二进制中,只有两个数字 0 和 1 ,可以由其中的一种状态来表示。由于二进制中只有两个数字,因此采用逢二进一,可类比十进制中的逢十进一。
二进制
如果我们有一个灯泡,可以规定当它亮时表示 1 ,不亮时表示 0 :
由此,我们得到一个最小化的整数存储系统。只是它的表示范围有限,只能表示 0 或 1 。
想要表示更多整数,我们需要更多灯泡。先增加一个灯泡试试:
两个灯泡亮灭状态总过有 $2^2=4$ 种组合,因此可以用来表示 4 个数值。我们可以规定:
- 两个灯泡全灭表示 0 ;
- 仅右边灯泡亮表示 1 ;
- 仅左边灯泡亮表示 2 ;
- 两个灯泡全亮表示 3 ;
不知您发现了没有,右边灯泡代表 1( $2^0$ ),可类比十进制中的个位;左边灯泡代表 2( $2^1$ ),可类比十进制中的十位。只不过十进制中,每一位都是 10 的 n 次幂,而二进制中则是 2 的 n 次幂。
接下来再加一个灯泡,来考察 3 位二进制数中,每一位跟 2 的幂之间的关系:
- 左边灯泡代表 $2^2$ ,也就是 4 ;
- 中间灯泡代表 $2^1$ ,也就是 2 ;
- 右边灯泡代表 $2^0$ ,也就是 1 ;
灯泡亮代表这位为 1 (加上对应幂),灭代表 0 。因此,3 位二进制数可以表示的数字范围是:
- 灯泡全灭时为最小值: $0\times2^2 + 0\times2^1 + 0\times2^0 = 0$ ;
- 灯泡全亮时为最大值: $1\times2^2 + 1\times2^1 + 1\times2^0 = 4 + 2 + 1 = 7$ ;
因此,我们可以得出结论:n 位二进制数可以表示 $2^n$ 个数值,以 0 为最小值,则最大值是 $2^n-1$ 。
最后,再考察下 8 位二进制数,进一步加深理解:
- 可表示 $2^8 = 256$ 个数值;
- 最小值为: 0 ;
- 最大值为: $2^8-1 = 255$ ;
由此可见,二进制跟十进制原理是相通的,只不过是进制从 10 变成 2 。
项目 | 十进制 | 二进制 |
---|---|---|
进制 | 10 | 2 |
相邻位相差倍数 | 10 | 2 |
右数第 n 位代表的数值(从 0 开始) | $10^n$ | $2^n$ |
个位代表的数值(右数第 0 位) | $10^0 = 1$ | $2^0 = 1$ |
十位代表的数值(右数第 1 位) | $10^1 = 10$ | $2^1 = 2$ |
百位代表的数值(右数第 2 位) | $10^2 = 100$ | $2^2 = 4$ |
n 位数个数 | $10^n$ | $2^n$ |
n 位数最大值 | $10^n-1$ | $2^n-1$ |
【小菜自制计算机】系列文章首发于公众号【小菜学编程】,敬请关注: