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

请问!数据溢出的小疑点

2013-12-26 
请教!数据溢出的小问题本人菜鸟,想请教个有关数据溢出的小问题short i32767couti iendlii+1

请教!数据溢出的小问题
本人菜鸟,想请教个有关数据溢出的小问题

short i=32767;
cout<<"i= "<<i<<endl;
i=i+1;
cout<<"i+1= "<<i<<endl;

以上代码,i+1肯定会溢出。

short i=32767;
cout<<"i= "<<i<<endl;
//i=i+1;
cout<<"i+1= "<<i+1<<endl;

以上i+1不会出现溢出。

想请问一下,第二种情况为什么不会溢出?内部运行机制是什么?
[解决办法]
short i=32767;
cout<<"i= "<<i<<endl;
//i=i+1;
cout<<"i+1= "<<i+1<<endl; // 1是int类型,这里的i被提升成int和1做+运算,结果是int类型,被cout <<输出

[解决办法]
//有符号整形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

热点排行