关于进位和溢出的理解及判断
进位和溢出的概念在理解计算机补码运算中非常重要,往往在汇编中都会遇到,在计算机组成原理、数字逻辑等课程中也会遇到。
在此之前,先要弄清楚有符号数和无符号数:以八位二进制数为例,有符号数一般用最高位来表示符号位,其余七位为数值位;而无符号数则没有符号位。
1. 无符号数
1.1 范围:
0 ~ 255
1.2 进位判断
首先,对无符号数来说 ,它只有进位或借位
即: 做加法运算时,他的最高位向上形成进位
或者:做减法运算时,他的最高位向上形成借位
==进位不是错误,在他能够表示的范围里,结果仍然正确==
举例: 1000 1111 (143) + 1010 0101 (165) = ==(1)== 0011 0100 (308)
由于结果只能显示8位,所以自动舍去括号里的进位。对于这个结果来说,
在他能够表示的8位范围里,他仍然是正确的。
2. 有符号数
2.1 范围:
-128 ~ +127
其中:最高位是符号位,所以数值位实际上只有7位
而对有符号数来说 ,它只有溢出
即: 做加减法运算时,他的运算结果超出能表示的范围。
举例: ==(1)== 000 0001 (-127) + ==(1)== 010 0110 (-90) = ==(0)== 010 0111 (+39)
事实上结果应该为:-127 + (-90) = -217,
但是 -217 超出他所能表示的范围,即溢出。并且,从运算结果来看,也是不正确的。
总结
溢出标志OF和进位标志CF是两个意义不同的标志.
进位标志表示无符号数运算结果是否超出范围,运算结果仍然正确;
溢出标志表示有符号数运算结果是否超出范围,运算结果已经不正确。
两个同符号数相加,才可能产生溢出。两个符号相异的数相加不可能产生溢出。
计算机对进位位的判断规则为:两个带符号数进行补码加减运算时,通常用符号位产生的进位(S代表)与最高有效数值位向符号位产生的进位(Cy代表)进行异或操作,若异或结果为1则发生溢出,反之则无溢出发生。OV = S + Cy 。以8位二进制为例,OV = Cy7 + Cy6 。
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
https://gcialisk.com/ - cialis buy online
https://vslevitrav.com/ - levitra pills for sale
Generic Cialis Reviews noppeplezeta [url=https://xbuycheapcialiss.com/]buy generic cialis online[/url] duttSork Buy Colchicine Online