编程中无穷大的设定 很多人可能设为0x7fffffff,这个数的确是32-bit int的最大值,符号位为0,其他的都是1 但在很多情况下,0x7fffffff会出现错误,比如溢出,这样两个无穷大数相

很多人可能设为0x7fffffff,这个数的确是32-bit int的最大值,符号位为0,其他的都是1

但在很多情况下,0x7fffffff会出现错误,比如溢出,这样两个无穷大数相加会变成负数,还有如在做dijkstra求最短路时,当做松弛操作,判断if (d[u]+w[u][v]

为了尽量避免以上的错误,我们可以改变无穷大的设定,可以将0x3f3f3f3f设为无穷大,0x3f3f3f3f的10进制表示为1061109567,这个数已达到10^9,足以表示无穷大,又0x3f3f3f3f+0x3f3f3f3f=2122219134,满足无穷大+无穷大仍为无穷大

当把无穷大设为0x3f3f3f3f时,在做初始化时也很方便,比如在初始化数组a时,可以使用

Memset(a,0x3f,sizeof(a)),因为0x3f3f3f3f的每个字节都是0x3f,如果使用0x7fffffff,需要循环赋值,耗费更多时间

下面做个简单的小测试

[cpp]  view plain  copy
  1. #include  
  2. #include  
  3. #define MAX1 0x7fffffff  
  4. #define MAX2 0x3f3f3f3f  
  5. int a[3];  
  6. int main()  
  7. {  
  8.     memset(a,0x3f,sizeof(a));  
  9.     printf("%d\n",MAX1);  
  10.     printf("%d\n",MAX1*2);  
  11.     printf("%d\n",MAX2);  
  12.     printf("%d\n",MAX2*2);  
  13.     for(int i=0;i<3;i++)  
  14.     printf("%d ",a[i]);  
  15.     printf("\n");  
  16.     return 0;  
  17. }  

编程中无穷大的设定 很多人可能设为0x7fffffff,这个数的确是32-bit int的最大值,符号位为0,其他的都是1 但在很多情况下,0x7fffffff会出现错误,比如溢出,这样两个无穷大数相_第1张图片

你可能感兴趣的:(C++)