博文

目前显示的是 十二月, 2022的博文

真正的高手,都具備高度抽象能力

在之前的《编程究竟难在哪? 》,我们谈过编程思维,其实就是“理解问题——找出路径”的思维过程,它由分解—识别模式—抽象—算法四个步骤组成。 今天,想和大家探讨的是这其中最重要的一步——抽象能力。 (一)什么是抽象能力? 人们在实践中认识到,在现实世界中一定事物、状态或过程之间,总存在某些相似的方面,即共性。 把这些相似的方面集中和概括起来,暂时忽略它们之间的差异,这就是抽象。 比如,我们将10只十分熟悉的猫咪放入100只陌生的猫咪中,一开始仅靠形象记忆,就可轻而易举找到这10只猫咪,但如果把这10只熟悉的猫放入一千只、一万只、十万只陌生的猫群中,我们仅靠形象记忆找到猫的困难会越来越大,大到不可能。 如果在10只猫身体上都打上记号,事情立即会变得很简单。 这个打记号的过程,是抽象思维。 抽象思维在理解概念时,就是在给所指事物寻找记号,不过这个记号不是人为的,而是事物本身固有的,指的是事物的规律和本质。 当我们遇到从未见过的事物时,如果能够运用“抽象思维”去寻找记忆中的知识——现有的事物之间的联系,作为解决过程的关键要素,那么我们解决问题的效率将会大大上升。 《北大逻辑课》一书中,就讲了一个运用“抽象思维”解决现实问题的例子。 在大宋提刑官中,有这么一桩有名的案子: 有一天衙门接到报案,发现一民居失火,男主人与房屋都惨遭不幸,而女主人因为刚好有事离家,因此幸免于难。 正在女主人为丈夫的逝去而哭泣的时候,法医宋慈发现了尸体的异样:死者虽表层皮肤被烧毁,但口中十分干净,并无烟灰。于是断定这个案件并非意外事故,而是另有凶手隐瞒真相,死者是先被谋杀、后尸体被烧毁。 宋慈的推理过程是这样的: 取一活猪、一死猪一起放在火中烧着,取出后发现活猪被烧毁后口中有大量烟灰,而死猪口中十分干净,并无烟灰。 宋慈解释道:“之所以会如此,是因为动物在被火烧会发出激烈的自救运动,而剧烈运动会大量的呼吸氧气,同时,就必然会把烟灰吸入口中、肺中,例如我们过年烧的猪头,由于是死猪,口中就十分干净。” “同理,本案中死者的口中并无烟灰,因此可以推断,他在火灾发生前,就已经被人杀害了!” 宋慈之所以能做出这段推理,就是灵活运用抽象,从“猪遇火灾的反映”抽象出“口中有无烟灰是生物遇火时,是死或生的唯一标准”这一定理,并加以证明的结果。 一个抽象能力强的人,往往能从复杂的现象中直击事物的本质。也就是我们生活中常...

原码、反码、补码

图片
  关于补码的由来和作用 最近在读《深入理解计算机系统》(CSAPP),第二章中关于补码的描述很有意思,在书中并没有详细叙述补码的由来和为什么要使用补码来表示有符号数,而不是用原码和反码。相反这本书详细的叙述了补码的数学表示,以及公式的推导!对补码的由来却一笔带过,甚至原码和反码只是简单的在后面的篮框提示中提了一下,根本没有出现在正文。 这在一定程度上造成了我的阅读困难,于是在搜索引擎的帮助下,我查了很多资料,了解到补码的更多细节,以及这个神奇的编码方式如何帮助人们设计CPU时节省大量的精力和金钱。这里我把他记录下来。 计算机中的信息都是用二进制表示的,在表示无符号数时并没有什么问题,但是在表示有符号整数时就出现了问题,如何在二进制中区分正数与负数呢? 区分正数和负数的另一个意义在于如果能够准确的表示出、负数,我们就可以化减法为加法,如5-4就可以表示为5+(-4),至于为什么那么多先辈要执着于把减法化为加法,原因很简单,对计算机的电路而言,计算加法要比计算减法方便的多。 很多人提出了有符号整数的编码方式,其中有: 原码 (Sign-Magnitude)、 反码 (ones' Complement)、 补码 (two's Complement)。 原码 原码的英文为sign-magnitude,第一个单词为符号的意思,第二个单词经过查询有“大小”的意思,大意应该为 符号-数值 的组合,在原码中,第一个数字代表符号位,1代表负数,0代表正数,余下的为数值位,用来表示具体的数值。这种编码方式最 简洁易懂 ,也最 符合人的思维 。比如:-5用4位二进制原码来表示就是1101。 CSAPP中给出的原码数学公式为: 由此我们能推断出SMAX w =2 w-1 -1,SMIN w =-(2 w-1 -1)。如八位二进制原码的范围应该为[-127,127]。 实际上目前我们很少用原码来做运算,原码目前常常用来作为我们求补码的一个过渡。 反码 反码的英文为ones'complement,乍看之下有些迷惑,翻译过来是“很多个1的补”,似乎更迷惑了。。。 其实反码确实可以用“ 很多1的补 ”来理解,我们都知道w位二进制数表示的最大范围是2 w -1,用位向量来表示就是[111111....11111],就是很多个1。假设x是正数,求-x的补码的含义实际上就是求[...