CC++无穷大的表示 0x7fffffff + 0x7fffffff= 负数

CC++无穷大的表示 0x7fffffff + 0x7fffffff= 负数,第1张

C/C++无穷大的表示 0x7fffffff + 0x7fffffff= 负数 C/C++中无穷大的表示 1. 用0x3f3f3f3f(十进制:1061109567)表示无穷大

原因:
  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这几个数字,其他值需要使用循环初始化。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5579916.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-14
下一篇 2022-12-14

发表评论

登录后才能评论

评论列表(0条)

保存