原因:
1、0x3f3f3f3f和0x7fffffff(十进制:2147483647)一样都是10的9次方级别,足够大,几乎满足所有情况的需求
2、0x3f3f3f3f符合:无穷大 + 无穷大 = 无穷大的原则(0x77777777 + 0x77777777 = 负数)
3、初始化数组元素为无穷大时可以使用memset函数,更加方便(这需要了解memset函数的原理)
memset函数用于字符串的初始化,char类型占一个字节,所以在使用memset函数初始化字符串时,是一个字节一个字节初始化的。虽然该函数也能用于int数组的初始化,但int占4个字节,memset函数会向每个int型变量的每个字节写入相同的值。所以要把数组初始化成0x7fffffff需要循环赋值。而0x3f3f3f3f的每个字节都是0x3f,可以直接用memset初始化,很方便。
memset(a,0x3f,sizeof(a)) //把一段内存置于无穷大2. 0x7fffffff + 0x7fffffff = 负数
0x7fffffff是32位int型的最大值,符号位为0,其他的都是1。但这个值在相加时会溢出,这样两个无穷大数相加会变成负数。
注: 使用memset一般只用来初始化0、-1、0x3f这几个数字,其他值需要使用循环初始化。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)