acette retweeted
Replying to @RizumuA3
与时俱进,因地制宜。“设计模式”就是一种工具,当你所面对的问题和所处环境需要它时,就拿出来用。当你不需要它时,就把它丢一边就好。另外分享楼主说的这本书的概览: lijigang-software-design-phi…
acette retweeted
一个计算机系研究生的特别作业
导师说自己讨厌自然数的负号“-”
几十年前,我读研第二年的一个下午,导师把我叫到办公室,没有寒暄,直接布置了一个看似荒唐的任务。
他没有递给我任何教材或论文,只是看着我的眼睛,说:
“设计一个自然数体系的数字表达方式。在这个系统里,永远看不到负号。”
那是我第一次被要求“从头重写数学”。我意识到,数学并非刻在石碑上的神圣经文,而像一台精密的机器,可以被拆开、理解,甚至重新组装。
既然目标是让负号消失,我只能回到最熟悉的起点;十进制,把它彻底拆开,看看它究竟是如何运作的。
一、拆解十进制:位权,隐藏的引擎
我们称之为“十进制”的系统,其真正的学术名称是“十进位制”。它的成立,只依赖于两个简单的核心结构:
基数:就是“逢十进一”的那个“十”。
位权:每个数字位置代表的权重不同。从个位开始,权重是1;向左移动一位,权重就是前一位的十倍(1 × 10);再向左,就是百倍(10 × 10)……以此类推。
所以,当我们写下符号“178”时,它真正的含义是:
1 × 100 + 7 × 10 + 8 × 1
二、负号从何而来?位权全是正数的“缺陷”
问题浮出水面:当我们进行“3 - 8”这样的运算时,结果为-5。这个负号从何而来?
究其根源,是因为在我们的系统中,所有权重都是正数。
当较小的数字需要减去较大的数字时,这套纯正的权重系统无能为力,只能额外引入一个负号“-”作为补救。
我盯着这个“缺陷”,灵感一闪:
“如果……让位权自己带上负号呢?能不能把这个刺眼的‘-’,直接吸收到数字结构的内部分?”
导师没有给我答案,但路径已经清晰:要想根除负号,必须动摇它的根基:改变基数。
三、核心改造:将基数从 +10 变为 -10
我的方案是:将基数从10改为-10。
这个简单的改动,引发了一场静默的革命。位权序列随之变为:
…, (-10)³, (-10)², (-10)¹, (-10)⁰ → …, -1000, 100, -10, 1
看,位权像心跳般正负交替,自己承担了翻身的任务。
现在,同一串数字“178”的意义彻底改变了:
1 × 100 + 7 × (-10) + 8 × 1 = 100 - 70 + 8 = 38
而数字“12”则意味着:
1 × (-10) + 2 × 1 = -10 + 2 = -8
写法上全是正的数字,含义却可正可负。
导师深恶痛绝的负号,不是被禁止了,而是被“做掉”了——它的功能,完全由交替正负的位权代劳。
我把这个系统称为“基为-10的系统”。
在这个新世界里,所有整数都被映射成了没有负号的正整数串:
普通十进制 基为-10的系统
123 283
-456 1664
7890 13910
-13579 194581
24680 36720
一眼望去,你无法从长相判断一个数的正负。所有整数,都穿上了一件“正整数”的外衣。
四、数学完备性:一个不漏,一个不重
这层“外衣”穿得完美吗?需要回答两个问题:
1. 是否单射? 不同的整数,会有不同的编码吗?(会不会撞衫?)
2. 是否满射? 所有正整数,都对应着某个唯一的整数吗?(衣服够不够穿?)
答案是肯定的。可以严格证明,这个表示法是一一对应的,一个不漏,一个不重。
五、新世界的运算法则:进位与借位的“翻身”
改变基数后,最反直觉的是运算法则的重塑。在基为-10的系统里,每一次进位和借位,都意味着一次符号的翻转。
加法规则:
1. 个位照常相加。
2. 向前进位时,进位的数值需要乘以-1(即翻转符号)。
3. 若某位相加后 ≥ 10,写下 (结果 - 10),并向高位进一个翻身后的值(即-1)。
4. 若某位相加后 < 0,写下 (结果 + 10),并向高位进一个翻身后的值(即+1)。
例:计算 178 + 86
· 个位:8 + 6 = 14 → 写4,向十位进 -1 (因为 1 × (-1) = -1)
· 十位:7 + 8 + (-1) = 14 → 写4,向百位进 -1
· 百位:1 + 0 + (-1) = 0 → 写0
· 结果是 044,也就是 44。
这背后发生了什么? 在基为-10的系统里,178 代表 38,86 代表 -74。所以 178 + 86 实际是在计算 38 + (-74) = -36。而 -36 在这个系统中,正是 44(读者可自行验证)。计算自洽!
减法规则同理,借位也需要翻身,过程对称,确保负号永不现身。
最终,位权默默承担了所有原本需要负号来做的工作。
六、尾声与启示
我把所有推导和规则整理好,交给了导师。
他静静地看了五分钟,合上稿子,嘴角露出一丝难以察觉的笑意。
“你知道吗?”他说,“你其实重新发现了计算机的补码系统。二进制计算机表示负数,用的就是类似的‘负二进制’思想。”
原来如此!计算机的Byte中没有什么bit比其它bit更特殊,哪怕是符号位的那个bit。
说完,他笑了笑。这门特别的数学作业,就此结束。
把基数从 +10 改成 -10,不只是让一个符号消失,而是让整个数字宇宙翻了个面。
它揭示了一个真相:那些我们习以为常的数学结构,看似简单直白,其实都建立在精妙而隐秘的约定之上。
在 Coze 上创建了一个英语单词分解记忆的工具: coze.com/store/bot/736093376…
有意思,还有这样的博弈。
说起来,各种基于区块链的币对能源、计算资源、硬件的挤占,目前也没见到带来什么社会效益,至少是不道德的yystv.cn/p/8036
acette retweeted
Replying to @eternoveritas
接诊过一个小朋友,双眼的上下眼睑都被502粘住了,眼泪在里面包住出不来,两眼都肿了。
但502对抗剪切力的能力不强,用针尖剥开一点以后,水平交错用手指推了一下就分开了
设计典范
An old #leveldesign classic
Mario world 1-1 did a lot of things right. 😍





















