我年轻的时候帮人写过一个在线小游戏,最高分存进数据库,类型选的是32位有符号整数。当时心想,一个分数而已,怎么也够用了。
后来玩家天天刷分,数字越涨越高。有天榜首突然挂了个负数,底下评论区比游戏本身还热闹,都在猜那哥们儿是开了挂还是穿越了。我盯着 -2147483648 看了半天,抽了口烟,才反应过来是溢出了。
嗯…
机器其实很老实。你给它多少位,它就只认多少位,多一分都不替你记。我们用有限的比特去装一个没有上限的野心,装不下是迟早的事。后来改成了64位,又顺手加了上限校验。
现在写代码,遇到计数、计分、时间戳累加这类东西,我总习惯多看一眼边界。年轻时栽过的跟头,后来都变成了肌肉记忆。