读深入理解计算机系统GET的技能。
补码加法溢出
当x>0 且y>0 时,x+y<0正溢出 以及 当x<0且y<0时,x+y>0负溢出
可以写判断函数int add( int x, int y)//1代表不溢出 比-2^(w-1)小了就+2^w比2^(w-1)大了就要减去2^w
{
int sum=x+y;
int neg_over =x<0&&y<0&&sum>0;
int pos_over =x>0&&y>0&&sum<0;
return !neg_over&&!pos_over;
}
无符号加法溢出
int add(unsigned x,unsigned y)
{
unsigned sum=x+y;
return sum>=x; //x+y-2^w when 2^w+1 >x+y>=2^w }