发信人: literfer()
整理人: majorsun(1999-07-16 08:15:10), 站内信件
|
前段时间有一种说法,一九九九年四月九日是电脑两千年问题的一个爆发日 (不妨把它称为四个“9”问题)。其理由为:该日是“99”年的第“99”天,出 现了四个“9”,而过去的电脑程序员爱用四个“9”来做数据或程序的结束标志 ,因此到了四月九日,老的程序将可能出现问题。
我觉得这种说法十分可疑。我认为,一个程序在四月九日这天必须满足这几 个条件才会出现四个“9”问题:第一,该程序必须在内存里记录下年份,既一九 九九年的“99”。第二,该程序必须在四月九日这一天统计出该天距离一月一日 有九十九天,并把得到的“99”和年份的“99”记录在一块相邻的存储区里,这 样才会产生四个“9”。第三,程序在存储这四个“9”时搞错了内存地址,把代 表年份和天数的数据存储到了本应该存储结束标志的内存地址里了。或者程序在 读取结束标志变量时读错了地址,读到了存储上述的存储四个“9”的内存地址里 去了。程序要么读了不该读的内存区,要么写了不该写的内存区。总之是访问了 错误的内存区。
满足这四个条件的程序,是一个多么糟糕的程序啊。这样的程序会过得了测 试关吗?会被用在飞机,轮船和重要设备的电脑里吗?这样的程序,何止在四月 九日这天会出问题,它天天都有出问题的危险。
电脑所处理的数据类型和内容千差万别,内存中出现四个“9”的情况估计不 会太少。当飞机飞到了九千九百九十九米高时,当航程达到九千九百九十九公里 时,以及当别的数据出现了四个“9”的数值时,按照四个“9”问题的逻辑,此 时飞机上的电脑不也同样面临着危险吗?飞机上“愚蠢”的电脑不也同样会把这 四个“9”当成数据结尾的标志或程序结束的标记吗?既然如此,四个“9”问题 应该天天都有,为何独独一九九九年四月九日这天就会特别严重呢?
程序员爱用四个“9”作为数据结尾和程序结束的标志,这也许是真的。可是 程序员也用别的数据和符号作为数据结尾和程序结束的标志。在C语言里,字符串 是用'\0'(即零)来作为结尾标志的。大量的函数是用返回“FALSE”(也是零) 来作为出错结束的标志的。按照四个“9”问题的逻辑,这下可完了,电脑的内存 里有数不清的零,电脑所处理的数据里也会有数不清的值为零的数据项。时间方 面,有每天的零时,每小时的零分,每分钟的零秒。天啊,世界上的电脑时刻都 面临着灭顶之灾,应该二十四小时监视着电脑才行,为何独独一九九九年四月九 日这天才特别强调问题的严重性呢?
当四月九日终于平安度过之后,报上说:“全世界的人们都松了一口气”。 我认为,以其说这是由于人们事先处置得当,倒不如说这一天根本就不会出什么 事。
我认为,四个“9”问题在逻辑上根本站不住脚,是一个彻头彻尾的科学骗局 。我想,99年的9月9日也将会是一个平安日。
-- 任我独行
※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.103.243.149]
|
|