致敬程序员 之 趣读 " 0 "和 " 1 "

emmm ,不要怀疑,身为一位准程序员,我差点没想起来今天是程序员日,真是汗颜。。。大家都知道,10 月 24 日 来源与 2 的 十次方,对于程序员来说 1024 有深刻意义,它是2的十次方,二进制计数的基本计量单位之一。程序员是从事程序开发、维护的专业人员,他们就像是一个个1024,以最低调、踏实、核心的功能模块搭建起这个科技世界。

现在让我来为你们解读 0 和 1
有人说,这有什么,无非是二进制数啊,如果你也这么认为的话,那请看这么一道题:

程序员小 A 有一个任务,就是找出 1000 瓶药中的毒药,现在他可以要求若干只老鼠来检测毒药,只需一些不影响原样本的药即可有反应,药的反应时间为一天,药可以互兑且不会影响药效,试求一天时间至少需要多少只老鼠才可以检测出毒药?

很多人想到的是先用两只老鼠,将要分成两组,分别兑在一起,剔除一半的毒药,依次进行 10 次剔除,分别剔除 500 、250 、125 、63 、32 、16 、8 、4 、2 、1,总共需要 20 只老鼠

但是这个题的正解应该是:
将1000瓶药按照二进制写法标号,即变成一个十位的数,将序号最后一位为 1 的药挑出混合,依次将十位数都这样进行处理,将序号最后一位为 1 混合制成的药喂给一号老鼠,之后依次喂给第 2 只 … 第 10 只老鼠,观察哪些老鼠中毒就可以了。例如:标号为 1 、5 、8 、9 的老鼠中毒,中毒记作 1 ,否则计为 0 ,我们可以得到这么一个数 0110010001 ,转为二进制就是毒药的序号了

在这个题中,主要是要抓住筛选一半这个特点,二进制非 0 即 1,可以直接起到判断作用,去判断每一位即可,二进制非 0 即 1的这一特性恰恰带来了更高的效率

0 和 1 这一特性在数字电路中就是这类含义,用 0 和 1 代表状态
在这让人不禁想到了大刘《三体》中一段关于人列计算机的描述,在第一部中,那个三体游戏已经是一个比较好的脑洞了,可是读到游戏里面的人列计算机那个章节的时候,还是被深深的震撼了,那种用最土最土的办法来实现超牛的结果的设定,真是厉害。想一想千军万马组成的人列计算机,真的是大场面,那种远古时代与科技时代的巨大反差,印象深刻。

那是由三千万士兵组成的雄伟的方阵,一块占地三十六平方公里的计算机主板,这台计算机的基本组成单元是一个一个的“门部件”,每一个“门部件”都由若干名士兵组成。比如,“与门”由三位士兵组成,每人执两面小旗,一黑一白(黑色代表1,白色代表0);其中两名士兵表示输入,第三名表示输出。只有当前两名士兵都举黑旗时,第三名士兵才举黑旗;而其它任何情况下,第三名士兵都举白旗。同样道理,三名士兵还可以组成或门、与非门、或非门等其它部件。

正像三体游戏中的冯·诺依曼(游戏人物,计算机专家的代表)所说,复杂的宇宙万物其实是由最简单的单元构成的。这些简单的逻辑部件连接在一起,就能构成一套复杂的系统,从而完成复杂的计算。

当时读到这个情节的我还在高三,现在却和计算机有着深深的渊源,随着了解的不断加深,渐渐明白正是这样简单的二元逻辑,却构成了我们现在所有和计算机网络相关的底层。就像每一个程序员所做的一样,无论做的是什么,最终都汇入了这款软件,这项应用。随着互联网的普及和深入,他们所要创造维系的越来越多,知识更新、语言的更新换代,他们所面临的学习压力越来越大,事实上程序员不像大众所认知的那般轻松

1024,祝愿每个程序员写代码都没有 bug ,然后多长头发

最后,送大家一个 “读心术”
有下面五组数:
第一组:1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31
第二组:2 3 6 7 10 11 14 15 18 19 22 23 26 27 31
第三组:4 5 6 7 12 13 14 15 20 21 22 23 28 29 30 31
第四组:8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31
第五组:16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

问一个人,他的生日是否在各组数中,来获得他生日的信息
例如:一个人的生日只在第二和第五排,则可快速得出他的生日为 18
很简单,这几组数只是将 1 ~ 31 转为二进制,倒数第几位为 1 时,放入相应组,所以 1 ~ 31 的位置关系由此对应,就很快能得出来

" 0 "和 " 1 " 的奥秘有很多,今天也来不及一一列举,需要大家自行探索,下次有机会再分享

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值