为什么在切换到 64 位整数之前INT_MAX而不是UINT_MAX

Why INT_MAX and not UINT_MAX before switching to 64-bit ints?

本文关键字:MAX INT UINT 整数 为什么      更新时间:2023-10-16

为什么每个人都说谷歌将不得不从 32 位架构转向 64 位架构(8 字节int秒),现在江南 Style 已经超过了INT_MAX限制?为什么不从一开始就使用未签名的int,因为考虑计数器的负面观点是没有意义的?

谷歌的C++风格指南鼓励int而不是unsigned

不应使用无符号整数类型(如 uint32_t),除非有正当理由(例如表示位模式而不是数字),或者需要定义的溢出模 2^N。特别是,不要使用无符号类型来表示数字永远不会为负数。相反,请为此使用断言。

因此确实是有道理的,因为观看次数接近 0 的视频比观看次数接近 2^31-1 的视频要多得多:int32_t的行为与真实整数不同的区域需要数年时间,而每个 youtube 帖子都从另一个案例的区域附近开始。

无符号的失败(考虑到指数增长)也不会花费那么长时间。 更糟糕的是,如果它与代码库中其他地方签名的 32 位交互,它将很容易触发未定义的 bejaviour(溢出行为是未定义的)。

可能是因为代码很可能是用Java编写的,Java没有无符号类型。

但是,即使它是 C 或 C++,一些程序员出于策略原因避免使用无符号类型,例如有符号和无符号类型之间比较的意外结果(对于没有经验的程序员)。

此外,仅切换到无符号类型只会将问题推迟两倍。它将在不久的将来再次出现,需要第二次修复,从开发人员时间的角度来看,两个修复的成本超过一个。