前两天翻一段老代码,有个计数器跑了几年突然开始数负数,查了半天才想起是 int 溢出了。C 里 signed int 到顶之后不会报错,它直接 wrap around 变成负的,循环计数能瞬间反向。更阴的是编译器默认不帮你报警,你写 i++ 的时候它觉得这很合理。
简单说
这种坑离机器越近越常见。毫秒时间戳看着够用到天荒地老,可 32 位系统上那个 epoch 在 2038 年前后就要翻车,现在很多老系统里还埋着这颗雷。还有做位运算、写网络协议的时候,差一个 bit 边界就是另一回事。
现在写 Python 的人大概体会不到,语言层替你兜底了。但真落到嵌入式或者跟硬件打交道,还是得自己盯着类型上限。unsigned 和 signed 选错,结果能差出半个地球。关键计数都用够宽的类型,或者在边界手动判一下,比事后 debug 省心。