欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

计算机系统

程序员文章站 2022-04-21 12:02:14
...

做加法时,主要判断是否溢出
无符号加溢出条件: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)负溢出

相关标签: 计算机系统