数学建模社区-数学中国

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

作者: zxhutu    时间: 2005-5-5 21:41
标题: 怎么判断int型的变量超过取值范围
<>我写了一个这样的函数,想把字符串转化为int型的,代码如下,</P>
7 K; \  L) `, x: J# ?<>其中的int超出了取值范围的判断好像不太合理,请各位指教!</P>
2 A5 b5 O+ Z# K) _<>int StringToInt(const char* szStr){$ ~' o/ Z5 l0 l
    int nResult = 0;
" |7 `' K; J4 J3 }0 y4 ^6 g$ [    //int nValue = 0;     
3 A) _8 l9 ~" l* w. M7 {    const char* szTmp = szStr;
& |. F, K3 G0 Y2 M2 h- D( S3 V/ @    while (*szTmp){
' d' C( [3 p" A2 ~        if(*szTmp &gt;= 48 &amp;&amp; *szTmp &lt;= 57){  6 l9 |# g( m2 X9 I: X+ {
            nValue = *szTmp-48;   
! i/ `" j$ k8 H* b9 Y# ~/ q% [            nResult = nResult*10+nValue;
0 x7 V& `4 A! t$ O3 b0 c7 D  P        }
8 C8 z* w$ ^5 u* _8 N        else {8 w& X$ R, B! p5 Z( A/ Z5 D6 g2 r8 x
     return -1;
2 k# p1 i% |0 v: X" c        }
; b, `5 C5 W4 s8 s' E. g  r0 a        if( nResult &lt; 0 ) return -1;//out of range*****就是这里了!
+ b! ?. f6 K1 s8 w$ p( G        szTmp++;) J& B- K6 }( I; ~* n
    }
5 G! S+ e! |6 k& y    return nResult;
" u& q. V8 T3 r! {% N+ o}5 e5 F% \% b' g8 c
</P>
作者: ilikenba    时间: 2005-5-5 23:54
<>int -2147483648~2147483647</P><>这是32位编译器的int的取值范围,是否可以直接用来判断!</P>
作者: ilikenba    时间: 2005-5-6 00:40
<>  #include "math.h"
8 W, d6 ^1 l) K% K" E0 f* q  int i ;* j6 u3 a; ^+ r
  int j ;" j* \% X! f) n( Y- d3 t1 K% Z
  j= 1&lt;&lt;(sizeof(int) + 1);" N9 J" D* i. T1 v/ b6 s( v: N
  i=pow(2,j-1)-1;</P><>上面的i就是32位编译器要用来作判断的值!下面是16位编译器的值!</P><>  #include "math.h"
! P6 a- U/ T) d2 \+ w% |  int i ;
& }& ^- }, W7 c, b, v  Q  int j ;$ Z. ~6 @$ J- Q7 L2 O4 b
  j= 1&lt;&lt;(sizeof(int) + 1)-1;
) d3 Q% e* Q" n& z, o' i. b  i=pow(2,j-1)-1;</P><>  你可以在程序中用它来作越界判断的门槛!</P>
作者: skiller    时间: 2005-5-6 16:28
恩,sizeof的确是个好的解决方式~!




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