关于计算机的二进制,首先来想想我们日常使用的十进制。
那么为什么我们日常要使用十进制呢?其实看看你的双手,一共有几根手指?是不是一共十根?那么10 代表的就是一双手的手指的数量。例如1234,他所代表的示意是:
1 * 1000 + 2 * 100 + 3 *10 + 4 *1 。
换一个形式就是1 * 10^3 + 2 * 10^2 + 3 * 10^1 + 4 * 10^0 。
但是到了计算机里这种数值表述方式就麻烦了,如果我们要在计算机保存十进制数值那么,计算机得有能力用某种形式描述出至少10种状态才行也就是0到9。
那么想象一下要是我们每只手只有3个手指,那么如果10 依旧代表一双手(六根手指),此时12相当于一双手加两个手指 也就是“八”。这种计数方式我们可以称为6进制。那么234这个数值在六进制里代表什么呢?2 *6^2 + 3*6^1 + 4*6^0
遗憾的是计算机没有手指。那它如何描述不同的数值呢?使用高低电平(也就是较高电压和较低电压),举个例子,假如你有一个电子游戏机,它使用的是三节5号电池,电压就是4.5V,那么它会用大于2.5v的电压代表高电平小于1v的电压代表低电平,这样就可以区分出两种不同的状态。为什么这么干呢?因为使用这种表述方式的电路设计相对简单。
这就好像计算机一共只有两根不同的手指。那么怎么描述数值呢?使用“二进制”方式。
在十进制里,我们的每一位数值需要10种状态 0 1 2 3 4 5 6 7 8 9 ; 那么二进制里只需要 0 和1 就够了,并用高电平对应1,低电平对应0。这个时候 10 依旧代表计算机的全部“手指”,也就是 “二”。110呢?自然就是 1 * 2^2 + 1 * 2^1 + 0 * 2^0 也就是 1*4 + 1*2 + 0这不就是相当于十进制里的6嘛!那么1010呢 1*2^3 + 0 * 2^2 + 1 *2^1 + 0 *2^0 这是不是就是十进制数值里的 “十” ?
但是新的困惑又来了。如果我们写一个 数字 10 在我们不知道它的进制的前提下,你能确定它到底代表的是几个手指吗?可能是 二 可能是 六 也可能是 十。所以为了在书写是方便区分一般我们要在二级制数值前面加一个标记“0B”,也就是 0B10 或者换一个数字 0b10101010。
最后我们来试着计算一下 0b1111 是我们人类自然数值中的几?8 + 4 +2 +1 = 15
0b1011呢? 8 + 0 + 2 + 1 = 11
0b1100 8 + 4 + 0 +0 = 12
那么 十进制的 9 呢?变成二级制就是 0b1001
123 就是 0b01111011
这样我们就可以让计算机用二级制保存保存我们人类的自然数啦。