帮忙写个判断语句?
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);
}
}
}
//有符号整形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
__int64 L;2 如果不知道机器的位数大小,又如何写?
sscanf(a,"%I64d",&L);
if (L<-2147483648i64
[解决办法]
2147483647i64<L) printf("溢出\n");