我们现实生活中使用的计数方式,通常是“逢十进一”,称为十进制。从古至今,之所以人类一直使用十进制,我想大概是因为人有十个手指头。各国各民族的文字里都有十个数字,目前全球通用的0-9更是包含10个数字。
为什么计算机使用二进制计数
前面我们提到,计算机的本质就是数字电路组成的计算机器,数字电路中只有 1 和 0 两种状态,就相当于计算机只有两个手指,所以对于计算机而言,二进制是最自然的计数方式。十进制计数是“逢十进一”,那二进制就是“逢二进一”,十进制的 1,2,3,4 对应二进制的 1,10,11,100。二进制的一个数字称为一个位(bit),三个 bit 能够表示的最大二进制数就是 111,也就是十进制的 7。
不过,不管是哪种计数方式,数的大小并没有变,十进制的 1+1=2,二进制的 1+1=10,但十进制的 2 是等于二进制的 10 的。生活中,我们常用的十进制 15,读作“一十五”,34 读作“三十四”。那二进制的 10 就可以类比,读作“一二”,二进制的11读作“一二一”。
事实上,因为计算机的数字电路只有 0和1 两种状态,所以它只能用二进制存储和读取数据。因此程序员编程时,即使输入的是十进制计数的数字,最终编译的程序执行时,计算机依然是将之转换为二进制计数方式存储的。
你已经知道二进制的一个数字称为一个位(bit),事实上,人们把 8 个 bit 称为一个字节(byte)。我们常说电脑的硬盘式 500G 的,这个 500G 就是指 500G 个字节,也就相当于 4000G 个 bit。G 是计数单位,它有两个含义,计算机领域因为使用的是二进制,所以 1G 等于 220。在物理学中,1G 又可能等于 10 9。
十进制和二进制怎么转换
在解决这个问题之前,我们先来考虑这一个问题:
假设有一个十进制计数方式的数字,它的百位为 a,十位为 b,个位为 c,如何用 a, b, c 表示出这个数字?
直接 abc?这在数学上表示 a 乘以 b 再乘以 c,并不对。正确的做法是 a* 10^2+b* 10^1+c,因此 123 = 1* 10^2+2* 10^1+3。同样的道理,在二进制计数方式中,101 = 1* 2^2+0* 2^1+1 等于十进制中的 5。我们再来看看十进制的 13,转换为二进制为多少:13 = 1* 2^3+1* 2^2+0* 2^1+1,所以,十进制的 13 换成二进制就是 1101。(头条不支持上下标,10^2 表示 10 的 2 次方)
有了这样的思路,计算机如何表示小数,也就非常清楚了。二进制的 0.abc 就等于 ax2^-1+bx2^-2+cx2^-3.所以一个字节能够表示的最大数字是多少呢?我们来看看,1byte = 8bit,所以一个字节能够表示的最大数字为 11111111,换算成十进制就是 1* 2^7+ 1* 2^6+…+1 = 255。实际上,如果用一个字节表示有符号数(考虑可能表示负数的情况),计算机要把最高位用来表示正负号,这个时候,一个字节最大能表示的数就只有 127 了。
欢迎在评论区一起讨论,质疑。文章都是手打原创,喜欢我的文章就关注一波吧。