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

时间:2014-12-06 22:03:41

标签: c++ c architecture

为什么每个人都说Google必须从32位架构转换到64位架构(8字节int s),因为Gangnam Style已超过INT_MAX限制?为什么不从头开始使用无符号int,因为考虑计数器的负面观点没有意义?

2 个答案:

答案 0 :(得分:4)

Google的style guide to C++鼓励int超过unsigned

  

除非存在诸如表示位模式而非数字的有效原因,或者您需要定义溢出模2 ^ N,否则不应使用无符号整数类型(如uint32_t)。特别是,不要使用无符号类型来表示数字永远不会是负数。相反,请使用断言。

因此确实有意义,因为视频近0视频的视频数量远远超过视频数量接近2 ^ 31-1的视频:到达int32_t行为与实际整数不同的区域需要花费数年时间。每个youtube帖子都在另一个案例的区域附近开始。

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

答案 1 :(得分:1)

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

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

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