数学建模社区-数学中国

标题: 怎么判断int型的变量超过取值范围 [打印本页]

作者: zxhutu    时间: 2005-5-5 21:41
标题: 怎么判断int型的变量超过取值范围
<>我写了一个这样的函数,想把字符串转化为int型的,代码如下,</P>7 o0 L. P( T+ h7 `6 o7 _# _
<>其中的int超出了取值范围的判断好像不太合理,请各位指教!</P>1 _2 u& `% }3 A4 [9 s; ~
<>int StringToInt(const char* szStr){( G* Z- D( S. k# ]9 {
    int nResult = 0;
2 Z) H, g  u0 X' C+ ^( e    //int nValue = 0;     9 k. y6 `& i- H
    const char* szTmp = szStr;/ ~% h: Q3 L. R% N! c- d
    while (*szTmp){! H0 C/ H( U1 A
        if(*szTmp &gt;= 48 &amp;&amp; *szTmp &lt;= 57){  5 a! Z* ]( Z3 M4 E
            nValue = *szTmp-48;   
) j, E7 |; w: f6 U2 q  E: ?            nResult = nResult*10+nValue;, ?  h2 P6 v5 K% g8 w
        }
+ N# }! h3 A6 |( A7 i" x; `        else {+ [  }5 w; v" `) C9 ]  c2 w
     return -1;8 T. [' Z# f5 ~% X2 [
        }
, b0 B8 Q, o/ E        if( nResult &lt; 0 ) return -1;//out of range*****就是这里了!
4 |: z* P( J" c4 |        szTmp++;* X- L$ g$ _' ]  O
    }
' U* b$ Q$ `' U% J    return nResult;
3 @+ L( }. u, N2 D}- j+ G# T, s' T* ~% [- p: y
</P>
作者: ilikenba    时间: 2005-5-5 23:54
<>int -2147483648~2147483647</P><>这是32位编译器的int的取值范围,是否可以直接用来判断!</P>
作者: ilikenba    时间: 2005-5-6 00:40
<>  #include "math.h". w/ p1 m2 @# f! l- f+ r1 i
  int i ;  `$ H( W( {( ?
  int j ;9 I- X+ Q# A8 f: A/ J
  j= 1&lt;&lt;(sizeof(int) + 1);
# C, E0 U: i4 U5 I  i=pow(2,j-1)-1;</P><>上面的i就是32位编译器要用来作判断的值!下面是16位编译器的值!</P><>  #include "math.h"( I# G9 |' \7 s: n3 w9 ~% ?6 N
  int i ;% g+ \0 h" G! a5 Z! L7 H  i2 @
  int j ;3 s8 l3 L6 a& i( c2 H
  j= 1&lt;&lt;(sizeof(int) + 1)-1;
1 j/ v5 }; [7 q. C5 i  i=pow(2,j-1)-1;</P><>  你可以在程序中用它来作越界判断的门槛!</P>
作者: skiller    时间: 2005-5-6 16:28
恩,sizeof的确是个好的解决方式~!




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5