为什么INF要设置为0x3f3f3f3f?
解决算法问题时,经常需要赋予变量「无穷大值」INF
,而 INF
通常设置为 0x3f3f3f3f
Why 0x3f
0x3f3f3f3f
是16进制表示,转化为10进制为 INF=0B1061109567
,用科学计数表示法为
int
型变量的最大值为 -,也是 数量级
假设所有整数都是int
整型,不可溢出
那么使用 0x3f3f3f3f
作为 INF
无穷大的好处如下:
为 数量级,足够大,符合作为「无穷大」的期望
加上一个普通的整数(一般不会大于1e9),不会溢出,符合「无穷大加任何数仍然是无穷大」的期望
0x3f3f3f3f + 0x3f3f3f3f = 0B2122219134 < 2^31-1=0B2147483647
仍然不会溢出,符合「无穷大加无穷大还是无穷大」的期望
By the way
one can set an array of ints to infinity by doing memset(array, 0x3f, sizeof(array))
对于C++来说,可以使用memset
快速重置数组所有元素为无穷大
因为memset
是按照字节重置的,而0x3f3f3f3f
每8位都是相同的0x3f
好羡慕C++