在某些情况下,通常使用足够大的整数值来表示无穷大。我通常使用最大的可表示的正/负整数。这通常会产生更多的代码,因为您需要在几乎所有算术运算之前检查其中一个操作数是否为无穷大,以避免溢出。有时会希望有饱和的整数运算。出于这个原因,一些人使用更小的值来表示无穷大,这些值可以多次相加或相乘,而不会溢出。让我感兴趣的是,它非常常见(特别是在编程比赛中):
const int INF = 0x3f3f3f3f;
为什么这个数字很特别?它的二进制表示是:
00111111001111110011111100111111
我在这里看不到任何特别有趣的属性。我看到它很容易输入,但如果这是原因,几乎任何东西都可以(0x3e3e3e3e,0x2f2f2f2f,等等)。它可以添加一次而不会溢出,这允许:
a = min(INF, b + c);
但是,所有其他常量都可以。Googling只向我显示了大量使用该常量的代码片段,但没有解释或注释。
有人能发现它吗?
发布于 2013-08-25 20:53:01
ASCII码是字符串????
的0x3f3f3f3f
表示形式。
Krugle在其整个数据库中找到了该常量的48个实例。其中46个实例位于Java项目中,在该项目中,它被用作某些图形操作的位掩码。
1项目是一个操作系统,用于表示未知的ACPI设备。
1项目也是Java图形的位掩码。
因此,在Krugle索引的所有项目中,它被使用了47次,因为它的位模式,一次是因为它的ASCII解释,而不是一次作为无穷大的表示。
https://stackoverflow.com/questions/18429021
复制相似问题