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