“嗯,”栗子点点头:“那是因为,‘阴阳’中包含了更多的东西啊,比如,‘阴’和‘阳’是可以相互吸引的,但对于‘有’和‘无’,便没有类似的性质的。”
“相互吸引?”程志忽然听到了这样一个词语:“是电磁力吗?”
“如果橙子哥哥硬要这么理解也没问题的。”栗子点头,见程志大约理解了“一生二”,一挥手,手中的“阴阳粒子”又一次变小,变得细碎,而后,拼装,便形成了一浅二深三个大号粒子,跟一个明亮的小号粒子。
“然后就是二生三了——”栗子说到这里,狡黠地笑了笑:“到这里,就跟橙子哥哥描述的世界,完全一样了呢。”
“上夸克,下夸克……跟电子?”程志看了看那些粒子,有些不确定。
“是的呢。”栗子笑了笑:“所以,橙子哥哥,你对这‘道法’,是否熟悉些了呢?”
“想来……”程志摇头:“栗子你一定没听说过,‘奥卡姆剃刀原理’吧。”
“‘如非必要,勿增实体’——”栗子先是说了八个字,而后点点头:“这个栗子是听过的。怎么了,难道有什么不对的地方吗?”
“这里很能说明问题啊——”程志点头:“目前为止,被广泛验证的,只有夸克,而夸克之下的一切,我们都只能说是,‘一无所知’。”
栗子却是摇头:“然而道法就是这个样子啊——栗子的意思是,如果一定要证明的话,栗子的道法难道不是一个很好的证明吗?”
程志摇头:“或许……”
一句或许之后,程志忽然发现,自己竟然举不出一个实际的例子来反驳栗子的言论。
“或许什么啊——”栗子有些好奇。
“或许……”程志一时之间想了好多,关于道法,粒子,宇宙,魔法,空间,时间。最终,程志忽然想到了一个词语,“魔术”。
“栗子,你听说过‘魔术’吧——”程志忽然举出了这样一个例子:“变魔术的人,或许可以声称,自己可以‘大变活人’,而事实很可能只是,利用了搭档的柔韧性,以及一些光学上的错觉——真正的原理仅此而已,而若是放开了解释,说出‘量子隧穿’这样的词语,都没有什么奇怪的。”
“然而,这又能说明什么呢?”栗子有些疑惑:“为什么,橙子哥哥能相信‘质子和中子’,却不相信‘道元粒子’呢?”
“因为,前者有道理,后者没道理——”程志也只好这样做一个粗略的描述:“所谓质子和中子,会按照某种方式进行结合,结合出来的原子核具有一定性质,而这些性质都可以从一个有道理的‘薛定谔方程’求出来——而同样的,这些性质,可以用元素的周期性进行证明。薛定谔方程预测说,元素是有周期的,而事实上,元素周期表的确是按照薛定谔方程描述的那样排列的,这就是道理——”
说到这里,程志满脸的自信:
“为什么不信占卜,不信道法,原因很简单,因为后者讲不出‘道理’——或者,讲的‘道理’,都是经验的、含糊的道理,而非普遍的、精准的道理。”
“可是,明明道法,是讲道理的啊——”栗子摇头:“最多只是,道理复杂了一些而已啊。”
“又有谁知道——”程志听了栗子的话,只是摇头:“那些‘道理’,有多少是推断而来,而又有多少只是观测的结果呢?”
栗子忽然捉住了程志的一个漏洞:“没有观测,推断出的道理真的很可信吗?”
“自然可信的——”程志笑了笑:“找不到反例,推理就是准的,若是找到了反例,一定是推理在什么地方出了问题,而那个问题,又可以造成新的反例——这样,每当我们做了一次新的观测,要不然,我们能追溯到错误的源头修正我们的体系,要不然,我们的观测完全可以用我们的体系进行解释——”
“可是明明,”栗子只是摇头:“明明栗子的道法,橙子哥哥解释不了啊。”
“或许应当说,这算一种信仰吧。”程志摇头:“我只是不相信,世界是复杂的。”
栗子不解:“为什么这样说呢?”
程志摇头:
“因为,简单即是规律,而复杂的,往往多是人为。”
说完,程志又背了一些莫名其妙的东西:
“5b20、1dbf、0806、1b45、1920、0601、1b61、1904、0ff8、f025”
“这是什么?”栗子问。
程志摇摇头:“这就是所谓的‘人工设计’,栗子或许你很难想象,但这串数字是有意义的。”
“什么设计?”栗子又问。
“怎么说呢,这应该算是一种‘程序’吧,用lc-3的机器码写的程序,大约这也是我为什么不喜欢复杂的原因。”
“怎么了?”栗子问。
“还记得,那时候,我问父亲,计算机是怎么工作的,而父亲就给我简单讲了讲一个叫‘lc-3’的模型,模型很简单,就比如,每一条代码都由4位十六进制数构成,最左边一位,一共十六可能,分别代表十六个操作码,分4组,0、4、8、c是第一组,特殊代码,用于维护程序的整体结构,主要用于系统操作、调用以及返回,第二组1,5,9,d,主要是加减法跟逻辑运算,第三组2,6,a,e,主要是寄存器操作,将内存中的数字写入寄存器,第四组3,7,b,f,跟第三组对应,是把寄存器中的数字写回内存——想来,栗子你应当听不太懂吧。”
“这一切栗子都明白呢——”栗子微微摇头:“不要小看栗子呢。”
“好吧,”程志摇头:“既然你听懂了,我想问,我说的那一切,有道理吗?”
————————————————————
注:计算机习惯将低位写在左边而高位写在右边
就比如,记录“一万两千三百四十五”,和记录“六”。
在记录6的时候,很好记录,因为不管怎么记,6就是6,搞不出别的花样。
然而记录“一万两千三百四十五”的时候,会出现一个严重的问题,那就是,这五个数字该如何摆放。
如果按照一般想法,我们会按照写6的方法来写12345。
然而呢,计算机在读取的时候,万一读不全,读6的时候读到6,读12345的时候从左往右只读了1——这样比较大小,反而由于6比1大,我们可能会误判出6大于12345。
请注意,计算机不像《程序员升职记》之类的辣鸡游戏那样,把跳转,操作等等一切,甚至包括寄存器,都限制得死死的,甚至只允许字母减字母,不允许拿字母相减的结果加另一个字母。
在计算机里面,为了让执行指令数量尽可能少,狡猾的编程者会试图用类似“00006”的数字代替6,而用“12345”代替原本的12345,在补0之后,我们就可以正常比较6跟12345的大小——
然而问题来了,该补几个“0”呢?
因为数字可以无穷大,而硬盘至多有限大,为了解决“补零”的问题,计算机大牛们决定,改掉人类从最大那一位开始写的坏毛病(这个坏毛病会导致,需要在整个加法过程完成之后才能输出加法结果……)
值得一提的是,上面那个“人类通用”的写法叫做big-endian,中文叫“大端序”,大牛们发明的方法是,用类似“60000”的数字代替6,而用“54321”这样的数字代替12345,这种方法称为little-endian,或者“小端序”。
讲道理人类如果用小端序,算加法或许会更快些,因为那种场景,人只需要把自己当成是一个带进位加法器就可以了,但如果要从大端输出,我们可能不得不先缓存之前算出的每一位数。
若真的想玩编程/汇编,建议从lc-3模拟器开始,那个是计算机系的标准教学资料之一(不要以为程志的lc-3是随口瞎说的……里面的程序是中子大三时候写的)
这也是为什么程志没有说“最高位”而说“最左边那一位”的原因。
至于“补零”的问题,在小端序下面,一个“按需补零”就可以处理了,若是要求把big-endian原先存储在0x1000处的,补零至2位的数,改成补零至满4位,big-endian需要把02改成00,02,差不多,每一个数字都需要重新补零——然而对little-endian,只要数据存放合理,就不会有类似问题。