计算机系统
做加法时,主要判断是否溢出
无符号加溢出条件:CF=1;
带符号加溢出条件:OF=1;
举例:
若n=8,计算107+46=?
107=0110 1011
46=0010 1110
——————————————
01001 1001
溢出标志OF=1、零标志ZF=0、
符号标志SF=1、进位标志CF=0
无符号:sum=153,因为CF=0,故未发生溢出,结果正确!
带符号:sum= -103,因为OF=1,故发生溢出,结果错误!
整数减法举例
带符号溢出:
1.最高位和次高位的进位不同
2.和的符号位和加数的符号位不同
无符号减溢出:差为负数,即借位CF=1
做减法比较大小
规则:
Unsigned: CF=0时,大于 否则小于
Signed:OF=SF时,大于否则小于
整数减法举例
unsigned int x=134;
unsigned int y=246;
int m=x;
int n=y;
unsigned int z1=x-y;
unsigned int z2=x+y;
int k1=m-n;
int k2=m+n;
x和m的机器数一样:1000 0110,y和n的机器数一样:1111 0110
z1和k1的机器数一样:1001 0000,CF=1,OF=0,SF=1.z1的值为144(=134-246+256,x-y<0),k1的值为-112.
无符号减公式:
result=x-y(x-y>0)
result=x-y+2n(x-y<0)
带符号减公式
result=x-y-2n(2n-1<=x-y)正溢出
result=x-y(-2n-1<=x-y<=2n-1)正常
result=x-y+2n(x-y<-2n-1)负溢出
整数加法举例
unsigned int x=134;
unsigned int y=246;
int m=x;
int n=y;
unsigned int z1=x-y;
unsigned int z2=x+y;
int k1=m-n;
int k2=m+n;
x和m的机器数一样:1000 0110,y和n的机器数一样:1111 0110
z2和k2的机器数一样:0111 1100,CF=1,OF=1,SF=0
z2的值为124(=134+246-256,x+y>256)
k2的值为124(=134+246-256,m+n>128,即正溢出)
无符号加公式
result=x+y(x+y<2n)
result=x+y-2n(2n<=x+y<2n+1)
带符号数相加
result=x+y-2n(2n<=x-y)正溢出
result=x+y(-2n-1<=x+y<2n-1)正常
result=x+y+2n(x+y<-2n-1)负溢出
上一篇: 日本有什么特色小吃 日本特色小吃大全
下一篇: 计算机系统