虽然很早就接触了二进制,却一直没有正视这个问题,阅读《计算机科学导论》的时候,基本上是跳过了这一部分,总是以“这么基础的东西,反正工作中基本用不上”的理由给搪塞过去。最近正在阅读《编码》和《程序员的数学思维修炼》,心想终究还是得面对的,于是记录了一点笔记,希望不再回避letcode上关于二进制计算的题目。
10对于我们来讲是一个很平常但又十分神奇的数字。根据《编码》上面的解释,人类的双手非常适合数数,因而我们早已经适应了以10为基础的数字系统。也正是这个习惯,让我在刚接触二进制的时候,感到无比困惑,明明十分简单的概念,却始终不得要领。
十进制中以0-9这十个数码进行组合来表示数字,且赋予10的整数次幂重大的意义:十,百,千,万,亿...
那么,什么是二进制呢?
1. 概念
二进制就是使用0和1这两个数码进行组合来表示数字的一种计数方法。
计算机使用二进制的主要优点有:
技术实现简单,计算机的逻辑电路只需要表示两个状态(电路的断开与连接),使用1和0表示就够了;如果使用十进制,则只能依靠电压的高低进行区分,这无疑会大大增加技术实现的难度
运算规则简单,二进制的运算规则比十进制少了很多(不需要在文具盒上背诵加法表乘法表了),规则少意味着能够简化计算机的内容结构
适合逻辑运算,计算机不仅需要进行算术运算,还需要进行逻辑元素,二进制只有两个数码,恰好与逻辑代数中的真和假完全吻合!
2. 算术运算
2.1. 四则预算
2.1.1. 加
逢二进一
跟十进制的加法一样,只是进位从10变成了2,这是第一个需要认清的问题
// 加法表
0 + 0 = 0;
1 + 0 = 0;
0 + 1 = 1;
1 + 1 = 1; // 进位1
比如计算111 + 101,从右往左利用基本规则进行计算
第一位(从右往左的顺序)1 + 1 = 0;,进位1,
第二位原本是1 + 0,由于进位变成了1 + 1 = 0,继续进位1,
第三位原本是1 + 1 = 0并进位1,由于进位继续计算0 + 1 = 1,未再次进位
最后结果1100
好吧,我放弃用语言描述这个过程了,老老实实拿笔在纸上算两次就好了,实际上跟十进制没有任何区别ÿ