为什么在切换到 64 位整数之前INT_MAX而不是UINT_MAX
Why INT_MAX and not UINT_MAX before switching to 64-bit ints?
为什么每个人都说谷歌将不得不从 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++,一些程序员出于策略原因避免使用无符号类型,例如有符号和无符号类型之间比较的意外结果(对于没有经验的程序员)。
此外,仅切换到无符号类型只会将问题推迟两倍。它将在不久的将来再次出现,需要第二次修复,从开发人员时间的角度来看,两个修复的成本超过一个。
相关文章:
- 为什么在全局范围内使用"extern int a"似乎不行?
- int(c) 和 c-'0' 之间的区别。C++
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 为什么野牛仍在使用"int yylex(void)",却找不到"int yylex(YYS
- 有符号的int和int-有没有一种方法可以在C++中区分它们
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 是否可以从int转换为enum类类型
- 'max'匹配'std::function<const int &(const int &, const int &)>'无过载
- 没有函数模板的实例"max"与参数列表参数类型匹配(int、int)
- 如何编写一个 boost::spirit::qi 解析器来解析从 0 到 std::numeric_limits:<int>:max() 的整数范围?
- 为什么 numeric_limits<int>::max() 是 <int>> numeric_limits::infinity()?
- int max(一个变量)和 int max(int ,int)之间没有冲突,这是 C++ 中的一个函数
- 在<int> C++11 中使用 max 作为谓词中断
- 为什么INT_MIN的绝对值与INT MAX不同
- 错误:重载的“max(int, int)”的调用不明确
- 从Find Max方法返回一个int值并将其打印在测试文件中
- 将 DBL_MAX 转换为 int 的结果不同于 std::<double>numeric_limits::max() 到 int
- 写std::min/std::max对于异构宽度的int
- 长类型Max等于int Max error + math.h pow()编译警告:隐式常量转换溢出
- 将float转换为int,当超出int范围时,将其设置为max int或min int