在某些情况下,一般使用足够大的整数值来表示无穷大。我通常使用最大可表示的正/负整数。这通常会产生更多的代码,因为你需要在几乎所有算术运算之前检查操作数是否为无穷大,以避免溢出。有时候希望有饱和整数算术。为此,有些人使用较小的无穷大值,可以多次添加或相乘而不会发生溢出。让我感到好奇的是,在编程比赛中经常看到这种用法:
const int INF = 0x3f3f3f3f;
那个数字为什么很特别?因为它的二进制表示为:
00111111001111110011111100111111
我在这里没有看到特别有趣的属性。我发现这很容易输入,但如果这是原因的话,几乎任何东西都可以做到 (0x3e3e3e3e, 0x2f2f2f2f 等)。它可以在不溢出的情况下添加一次,这样就允许:
a = min(INF, b + c);
但是其他的常量都可以,那么。谷歌搜索只会显示很多使用该常量的代码片段,但没有解释或注释。
有人能找出来吗?