很多时候,我们都取0x7fffffff作为无穷大的代表,因为这是32-bit int的最大值。但是在更多的情况下,0x7fffffff并不是一个好的选择,它并不能满足“无穷大加一个有穷的数依然是无穷大”,它变成了一个很小的负数。除了要满足加上一个常数依然是无穷大之外,我们的常量还应该满足“无穷大加无穷大依然是无穷大”,这一点上0x7fffffff依然不能满足我们。另外它并不是真正意义上的无穷大数,也就是说,只要找到一个极大的数来代替它就行了。
而0x3f3f3f3f就很好的满足了这样的条件。
(1)0x3f3f3f3f的十进制是1061109567,也就是10^9 级别的(和0x7fffffff一个数量级),意味着它可以作为无穷大使用而不致出现数据大于无穷大的情形。
由于一般的数据都不会大于10^9,所以无穷大加上一个数据时并不会溢出。
(2)0x3f3f3f3f+0x3f3f3f3f<0x7fffffff,所以0x3f3f3f3f能够满足我们“无穷大加无穷大为无穷大”的需求。
(3)如果我们想要将某个数组全体赋值为零,我们可以用
memset(a,0,sizeof(a));
来实现,但当我们想将某个数组全部赋值为0x7fffffff时,就得自己写for循环了,因为memset是按字节操作的,它能够对数组清零是因为0的每个字节都是0,而0x3f3f3f3f的每个字节都是0x3f。所以
memset(a,0x3f,sizeof(a);
多么美妙。