计算机是如何做加法的?(5)——从十进制到二进制

在前面我们看到,用十进制来设计半加器是有不少困难的,因为它的状态太多了。如果想用简单的开和关去表达想要的计算,那么就要转向二进制。不过话说回来,你是否想过,为啥我们喜欢十进制呢?

为什么是十进制?

人类在大约20万年前走出非洲,分散到各地形成了各种文明,但为何在计数这一问题上,常常不约而同选用了十进制呢?

没错,答案就在我们的双手上,我们的十根指头与我们的十进制之间绝不是巧合。

设想一下原始人类的一次狩猎大丰收,一个首领兴奋地用指头在数着他们捕获的羊,一只,两只...哇,全部手指用光了还没数完,只好先在地上标识一下先,然后再把指头全部收回继续清点。

那么,这么一个标识的动作就是进位的雏形了,而我们最终形成对十进制的偏好也就不足为奇了。

其它的可能

据说非洲有部落是采用20进制,有学者去考察,发现他们数数时把脚指头也用上了,难怪呢!

而人其实有时会患上一种称为多指畸形的遗传性疾病,其中以六指症最为多见:

image

其实说是畸形是因为他们是少数派,如果他们成为主流,我们可能就会习惯使用十二进制了!

而怕老鼠的喵星人--哆啦A梦则可能喜欢二进制:

image

难道二进制真的是未来的趋势?据作者设定,它的生日是2112年9月3日。掐指头一算,哎呀,还不到100年了!话说小时候看书时觉得22世纪是件很遥远的事~

不过跟别人猜拳时就悲剧了:

image

而龙虾们如果有一天也能建立自己的文明,那么它们就可能是用四进制了:

image

截图来自《Code》一书。

广义的进制

如果我们把标准放松一点,那么就不难发现人类社会中是存在很多的进制的。

比如以时间为例,它混合了各种的进制。小时是12或者24进制,而分秒则是60进制。只不过我们还是用十进制方式来书写它们。23:59:59,再加一秒是00:00:00,因为满60或者满24就要进位了,进位后就归零了。

如果注意到12可以被2,3,4,6整除,而60则能被2,3,4,5,6整除。那么采用这样的进制是有助于去更细地划分它们的。

而货币方面,比如英国曾经是这样的:1英镑等于20先令,而1先令又等于12便士。

1先令等于12便士自然也能使得它易于分割。

而我们中国古代的秤,斤两之间曾经采用过16进制。

你以为“半斤八两”是怎么来的?

16进制自然可以使得对一斤多次取半还能取整。

进制的总结

下面对各种进制做些小结。

1. N进制有N个不同的数字(符号)。

所以,十进制就有十个不同数字,0,1,2,3,4,5,6,7,8,9;

那么,二进制就有两个不同数字,0,1;(借用了十进制的符号)

如果是十六进制呢?那么即便借了十进制的全部符号还是不够用,此时要么发明一些新的符号,要么就再借用一些别的符号了。

对于十六进制,实际借用了6个大写字母,0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F。

2. N进制逢N进1.

十进制逢十进一,二进制就是逢二进一。

对于二进制,1+1就要进位了,因为结果是2,但二进制根本不存在2这个符号,最大也就是1。进位后加位归零,结果是10(二进制).

image

反复加一,可以得到更多的值,红色的小1表示有进位:

image

以下为十进制与二进制及十六进制的一个对应表:

image 

3. N进制一个位最多只能表示N种不同状态,要想表示更多的状态,就要用更多的位。两个位能最多表示N×N种状态,三个位能表示N×N×N种状态,依次类推。

一位16进制能表示16种状态,两位则能表示16×16=256种状态。

一位十进制能表示10种状态,两位则能表示10×10=100种状态。

同理,一位二进制能表示2种状态,两位则能表示2×2=4种状态。

自然,要表示同样多种状态,二进制比十进制需要更多的位数。正如上面显示,至少4位才能表示。

但尽管如此,任何一个十进制数都是可以用二进制来表示的。用康托尔的话来说就是两个无穷集合是一一对应的。

进制的转换

对于一个十进制的数,比如说368,它的实质是什么呢?

其实是:3×102+6×101+8×100

=300+60+8

=368

对于N进制而言,N就是这个指数的底;指数则是右边最低位为0,然后向着左边的高位递增。

二进制转十进制

所以对于一个二进制数,比如1010来说,它对应的十进制数为:

1×23+0×22+1×21+0×20=8+0+2+0=10

所以10102=1010

下标为相应进制。

十进制转二进制

而对于十进制到二进制的转换,则通过反复对2整除直到商为0,然后取对应余数来获取。比如以12为例:

image

那么我们有:1210=11002

二进制的优势

以加法表为例,如果使用的是十进制,严格地讲,有10×10=100种情况需要考虑。

想想我们曾经背过的九九乘法表,它已经去掉了0,以及结合了交换律去掉了一些重复的情况,却还依然有高达45个条目,作为加法表,也是如此。

如果采用二进制呢?这个数目就大大减少了。

对于N进制而言,有N×N种规则需要考虑。因此,对二进制而言,只有四条规则。

二进制的加法表只有以下四条规则:

0+0=00,

0+1=01,

1+0=01,

1+1=10。

乘法表甚至更简单,因为不涉及进位:

0×0=0,

0×1=0,

1×0=0,

1×1=1。

如果不考虑与0相乘的情况,则只有一个条目:1×1=1

对比一下二进制的“一一乘法表”与十进制的“九九乘法表”:

image

啊,如果从一开始就采用二进制该多好,这画面想想也要醉了,再笨的熊孩子估计也能分分钟就掌握它们!

二进制的代言人,“蔡10”小姐就在一首歌里感慨地唱道:“那画面太美我不敢看...”(《布拉格广场》,蔡依林 & 周杰伦)

我们现在觉得用二进制不方便,看着不习惯,那大概是因为没有从小就接受这样的方式。

如果你天天接触,估计你也会习惯了。

有这么一种说法:世界有10种人,一种是懂二进制的,一种是不懂的。

image

国家需要你这种懂二进制的!

关于进制的问题,就说到这里。有了以上基础,在下一篇将介绍如何构建最终的二进制半加器。

转载于:https://my.oschina.net/goldenshaw/blog/416154

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值