为什么用比特来打架?
题主的问题其实有两个问题,一个是为什么要用比特(二进制)来作为计算机中数据的基本单位,另一个问题是为什么二进制能够用来运算。 第一个问题很好理解,因为现在世界上所有已商用的计算机所采用的 CPU 都是使用二进制的,所以自然世界上的数据和代码都是以二进制的形式存在的了!要是在一个计算机里面你想存储一个整数10,那么它这个整数是二进制形式表示的,要是想存储一个浮点数4.5,它也是二进制形式表示。
在计算机中所有的数据都是二进制格式!因此我们研究计算机系统结构,操作系统,文件系统,网络协议等等各种系统时,看到的所有的数据都是二进制数据。比如我在操作系统里查看自己的硬盘容量,他打印出来的结果也是二进制数。
第二个问题就有些复杂了,二进制之所以能进行数学运算,其原因在于我们有位域这种机制。位是计算机最基本的计算单位,而每一位都有其对应的二进制值,如一位数1,它的二进制值为0001。我们可以把两位合起来表示一个值。例如8个位可以组成256个不同值,从0到255。如果我要算两个数的和,比如7+3,我们把这两个数分别用位表示,然后把它们合并在一起,就可以通过位来计算出它们的和了。这样做的前提是将数字转换成二进制的形式才能进行。
另外需要提一下的是有符号数和无符号数,这两种数在计算机中都能进行加减乘除及其它四则运算。有符号数就是平常我们接触的有正负号的整数,它的加减法原理很简单,就是把两个数按位相加或者相减就可以了。至于乘法,你可以把它想象成一个个位的乘法,然后把所得的结果求和。除法比较麻烦,需要用到移位操作。 无符号数就是没有正负号,只有一个取值范围的整数,它的加减法则和有符号数一样,只是减法需要借助另外一个数来表示(详见《计算机组成原理》)。无符号数的乘法比较简单,就相当于各个位数相乘,然后求和。但是无符号数的除法就比较麻烦了,需要先把被除数变成有符号数然后再做有符号数的除法。