56个数字。
这个现象的实质就是,在编制软件程序解决现实问题的时候,BUG往往出现在处理极限数据的时候,诸如数据溢出等等。
在此类情况下,用1个字节表示的正整数255,再往上加1的话,计算机如果不主动报错,那返回的结果往往是0——因为真正的二进制数字串里进位到最高位的那个“1”,计算机无法表示,直接截断,剩下后面8位的“0”。
这只是一个最抽象、最基础的原理,实际的情况要复杂得多。
在1980年代中期以前,尤其大型机开始兴盛的1950到1960年代,不论内存还是硬盘,存储设备非常昂贵;能够接受的廉价解决方案,也就是穿孔卡片和磁带。
举一个普通人最容易接触到的例子,1977年推向市场的家庭电视游戏机——雅达利2600,内存仅为128个字节。
在这种情况下,计算机表示年月日,通常只有6位,形如1970年1月1日为“700101”,年份的前两位“19”被省略掉了。
再举一个更广为熟知的例子,那就是原本时空里中国的一代居民身份证——相比于后来的二代居民身份证的18位编码,少了3位,其中2位就是省去了4位年份数字的头两位。
基于那个数字溢出原理,这种计算机表示时间方法,到了2000年的时候,得到的结果很可能就是1900年。
由此产生的危害有多严重?
就银行领域而言,不好意思,你要倒闭了,储户利息凭空增加几十年;就税务领域而言,对不起,你破产了,欠国家100年的税;就电信领域而言,你要是敢在1
第0903章 割全球大户的肉(2/7)