数学建模社区-数学中国

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

作者: zxhutu    时间: 2005-5-5 21:41
标题: 怎么判断int型的变量超过取值范围
<>我写了一个这样的函数,想把字符串转化为int型的,代码如下,</P>) R. P+ H  N. {% ~4 j& m, ^
<>其中的int超出了取值范围的判断好像不太合理,请各位指教!</P>+ y: s4 I% _$ |# c2 x8 z
<>int StringToInt(const char* szStr){
* X& c; t' Y7 s. n9 j! _! h$ z# c1 ~    int nResult = 0;
  S2 @9 h! H5 ]* M    //int nValue = 0;     
& f8 K1 T  v- y+ N    const char* szTmp = szStr;
& k* U* `1 J/ y1 f* L1 \    while (*szTmp){
/ U7 A5 B$ i8 `+ v- I        if(*szTmp &gt;= 48 &amp;&amp; *szTmp &lt;= 57){  
- V% Z. J% p; V1 U2 _- z            nValue = *szTmp-48;   
4 V% k8 I4 ]  a+ [! t2 _- \6 e            nResult = nResult*10+nValue;( |& Y) h! {% N! g* ~
        }9 A% M% l, I- J' N7 ~8 V1 v  b6 A
        else {
; V; o9 v# O% j5 a) i& N  I8 Q     return -1;
- }9 i( o" Y& Q  N* g        }, ]% l- p5 H) q' L  h: E) i6 e, u
        if( nResult &lt; 0 ) return -1;//out of range*****就是这里了!- A6 h! N+ {6 w. U; i
        szTmp++;: @4 `6 A# e6 w5 }& v/ @
    }; l0 N6 E4 C3 ^; v& ]
    return nResult;
8 r, D3 F' X2 S- ?+ D}' G: U3 G, Q+ T5 q9 G: _
</P>
作者: ilikenba    时间: 2005-5-5 23:54
<>int -2147483648~2147483647</P><>这是32位编译器的int的取值范围,是否可以直接用来判断!</P>
作者: ilikenba    时间: 2005-5-6 00:40
<>  #include "math.h"
+ ]  g+ b' `- A( ^6 w* P) W* G# g2 p) v  int i ;
1 l! {, ^  t$ [& D+ T  int j ;
1 d5 X! p4 U8 h" z6 H  j= 1&lt;&lt;(sizeof(int) + 1);
$ r2 w+ D( s' u# Z9 r# @) F  i=pow(2,j-1)-1;</P><>上面的i就是32位编译器要用来作判断的值!下面是16位编译器的值!</P><>  #include "math.h": q8 z: J' @' Q* [
  int i ;) l4 L0 T$ Q0 o) ^" a* h. l) |
  int j ;" ~- G. {0 _5 x
  j= 1&lt;&lt;(sizeof(int) + 1)-1;) R% E! c$ q$ A  L- t
  i=pow(2,j-1)-1;</P><>  你可以在程序中用它来作越界判断的门槛!</P>
作者: skiller    时间: 2005-5-6 16:28
恩,sizeof的确是个好的解决方式~!




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