本文来自微信公众号:果壳 (ID:Guokr42),作者:玛雅蓝,题图来自:《赌侠》


你有没有想过,世界上最常见的电话号码是什么?


2011年,在一个计算机论坛上,有个技术宅突发奇想,提出了这个问题。经过一番搜索,他还真的找到了答案。全世界最常见的号码是:214-748-3647,在当时,这个号码在谷歌上有大约285,000个搜索结果。


这个号码的主人到底是谁?它怎么能同时出现在这么多网站上?


其实,这串号码有“神秘力量”,它不只是最常见的号码,还经常出现在工程、计算机领域。如果你看到了这串数字,最好赶紧停下来想一想是不是有什么地方不对头。


神秘数值2147483647


2147483647不是一般的数字。


首先它恰好是一个质数,而且2147483647这个数值等于 231 − 1,因此它也是第8个梅森素数(即形式为2的整数次方减去1的质数)


不过,2147483647最重要的一个身份,是32位计算机操作系统的计数上限。


今天的计算机系统绝大多数都要追溯到IBM System/360操作系统,它是世界上首个指令集可兼容计算机。


在这个系统当中,整数使用4个字节保存。一个字节(byte)是8位(bit),4个字节就是32位,最高位是符号位,那么实际上可用的只剩下31位。又因为一个位有两个状态(0或1),这种方式所能保存的最大整数是2的31次方减去1(0占了一个名额),即2147483647。


如果在系统中储存的整数超过了这个值,系统就会发生整数溢出(integer overflow),自动把数值转化成2147483647。


很显然,有大量的摸鱼程序员,把电话号码当成普通整数,用4个字节来保存它。于是当用户输入的号码大于2147483647时,就会自动转成这个数字。它就这么成了网上最常见的电话号码。


超过2147483647,就会有可怕的事发生哦


2147483647这串数字不只是最常见的电话号码,还经常在别的地方客串。


2020年在《原神》游戏中,有个玩家开外挂,打出的伤害值也刚好是2147483647点(因为没法更高了)


在游戏里这么干是会被封号的,也很不道德,千万不要尝试,图/《原神》


正常情况下,这个数值相当于21个亿,完全够用了,不过随着互联网的快速发展,超越这个数值并非不可能。


2014年12月,网络神曲《江南style》的YouTube累计播放量就超过了这个数值。YouTube把这件事视为一个公关的良机,并随之修正了计数系统。新的计数上限为9,223,372,036,854,775,808,比旧的计数方法高出了一亿倍。


虚拟世界里的整数溢出还是小事,但在工程领域,整数溢出可能导致程序崩溃,后果就很严重了。


2015年,美国联邦航空管理局(FAA)发布报告称,波音787飞机可能会因为整数溢出问题突然“死机”。


具体来说,负责调控飞机引擎供能的控制组件以0.01秒的精度计时,当飞机连续飞行248天时,计时系统就会达到2147483647个0.01秒,然后发生溢出,令控制组件启动故障保护模式(failsafe mode)


这个问题虽然可怕,但解决方案十分简单粗暴,那就是——定时关机重启。


时间来到2147483647秒,会怎样?


大多数时候,重启设备不会导致时间归零,比如你手机上显示的时间。这类设备中主要使用的是UNIX时间系统,从1970年1月1日00:00:00(UTC)开始计时。那么,这个系统什么时候会达到计时上限呢?答案是15年后。


1999年,一位名叫William Porquet的程序员发现,到2038年1月19日03:14:07,恰好是1970年1月1日起的第2147483647秒。这就好像2038版本的“千年虫”问题。于是Porquet建了一个网站,2038.org,提醒同行及时debug。


当然,他也接到了很多这样的反馈:“好的,那我们2037年再去debug。”


Porquet担心,一些无人维护的软件到时候会陷入崩溃,造成未知的后果。不过剑桥大学的计算机科学家Markus Kuhn接受BBC采访时表示,许多旧的软件和设备预计到时候已经被淘汰,或者在2000年“千年虫”问题之际得到了升级改造,预计2038年不会出现比“千年虫”更严重的问题


说到设备淘汰,至少固话是已经走在这条路上了。


在过去十年中,全世界的固话逐渐被移动电话所取代。想想你自己上一次使用固话是什么时候,就能直观感受到这种趋势。在我国,固定电话普及率从2011年的21.3部/百人下降到2021年的12.8部/百人,也就是说如今只有大约十分之一的人还在使用固话。


数据来源:工信部|cnii.com.cn


随着固话的退场(和程序员们的进步),传说中最常见的电话号码214-748-3647,也和固话一样,成了时代的眼泪。如果你喜欢这个数字,可以在北京时间2038年1月19日11:14:07,在心中向它举杯致意,并庆祝人类安然度过一个小危机。


参考文献

[1]https://projectricochet.com/blog/most-common-phone-number

[2]https://en.wikipedia.org/wiki/2147483647

[3]https://new.qq.com/rain/a/20201207A06K1300

[4]https://www.bbc.com/future/article/20150505-the-numbers-that-lead-to-disaster

[5]https://www.bbc.com/news/world-asia-30288542

https://www.theregister.com/2015/05/01/787_software_bug_can_shut_down_planes_generators/

[6]https://www.theregister.com/2020/04/02/boeing_787_power_cycle_51_days_stale_data/

[7]https://www.cnii.com.cn/ssgx/202201/t20220126_353992.html


本文来自微信公众号:果壳 (ID:Guokr42),作者:玛雅蓝