首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

帮忙写个判断案句

2013-06-26 
帮忙写个判断语句?a表示一个整型数,如何写判断语句,来判断这个a有没有溢出?分以下两种情况:1一般都是32位

帮忙写个判断语句?
a表示一个整型数,如何写判断语句,来判断这个a有没有溢出?

分以下两种情况:
1  一般都是32位机器,这种情况下如何写?
2  如果不知道机器的位数大小,又如何写?


求高手指点!!!
[解决办法]
it should be done before give the value of a.
[解决办法]
用临界值来判断。
16位机器,int变量临界值是65536,判断i与65536的大小。if(i>65536) cout<<"不是16位";else cout<<"是16位";
32位机器,同上;
64位机器,同上。OK。
[解决办法]
a本身不存在溢出的情况. 溢出发生在数据赋值的时候.

template <typename T1, typename T2>
bool noTrunc(T1& a,  T2 b)
{
T1 x = b;
return x == b;
}

void test()
{
char a = 10; 
int b = 127;
unsigned short c = 100;
int d = 65536;
cout << boolalpha << noTrunc(a, b) << endl;
cout << boolalpha << noTrunc(c, d) << endl;
}

[解决办法]
void main()
{
int b =0;
int a = 0x7FFFFFF0;
printf("%d\n",a);
while(b!=1)
{
a+=1;
__asm{
jo L1
jmp L0
L1:
mov b,1;
L0:
}
printf("%d,%d\n",a,b);
}
}
}

若b =1 则表示溢出了
[解决办法]
//有符号整形a和b,如何判断a+b是否溢出
#include <stdio.h>
int ifo_add(int a,int b) {
    __asm {
        mov eax,a
        add eax,b
        jo  overflowed
        xor eax,eax
        jmp no_overflowed
overflowed:
        mov eax,1
no_overflowed:
    }
}
int main() {
    int a,b;

    a=          1;b= 2;printf("%11d+(%2d) %d\n",a,b,ifo_add(a,b));
    a=         -1;b=-2;printf("%11d+(%2d) %d\n",a,b,ifo_add(a,b));
    a= 2147483647;b= 1;printf("%11d+(%2d) %d\n",a,b,ifo_add(a,b));
    a=-2147483647;b=-1;printf("%11d+(%2d) %d\n",a,b,ifo_add(a,b));
    a=-2147483647;b=-2;printf("%11d+(%2d) %d\n",a,b,ifo_add(a,b));
}
//          1+( 2) 0
//         -1+(-2) 0
// 2147483647+( 1) 1
//-2147483647+(-1) 0
//-2147483647+(-2) 1



[解决办法]
char a[]="1234567890";或char a[]="-12345678901234";表示一个整型数,如何写判断语句,来判断这个a有没有溢出?

 分以下两种情况:
 1  一般都是32位机器,这种情况下如何写?
__int64 L;
sscanf(a,"%I64d",&L);
if (L<-2147483648i64 
[解决办法]
 2147483647i64<L) printf("溢出\n");
 2  如果不知道机器的位数大小,又如何写?
先根据sizeof(int)得出机器的位数大小,在使用类似1的办法判断是否溢出。

热点排行
Bad Request.