热门问题
时间线
聊天
视角
溢位旗标
来自维基百科,自由的百科全书
Remove ads
溢位旗标(overflow flag)是电脑处理器中,标示是否出现算术溢位的位元,一般会放在状态暂存器的某个位元。溢位是指此运算的结果无法用二补数配合目前的位元个数储存。有些处理器会在出现溢位时自动产生例外。
假设,在8位元的暂存器中计算127加127,127+127是254,用二进制表示会是1111 1110,但在二补数下的二进制下,此数为是-2。两个正数相加,结果是负数,即为溢位(两个负数相加,结果是正数也是)。此时会设定溢位旗标,表示有此问题,程式可以输出错误,或是用其他方式缓解此影响。若二个同符号的数相加,结果符号位元改变,即为溢位。若是异号的数相加,不会出现溢位[1]。
当二进制数字表示为无号数时,溢位旗标没有意义,一般会忽略。二补数算术的一个好处是其加法和减法不需区分有号数和无号数。因此,大部份的指令集不会区分有号和无号的运算元,每一个指令都会更新有号数的溢位旗标和无号数的进位旗标,让后面的指令去处理相关的旗标[2]。
内部来看,溢位旗标是移进和移入符号位元之进位旗标的逻辑异或。
位操作(and、or、xor、not、位元旋转)没有针对有号溢位的标示,不同的处理器架构会有不同作法。有些处理器会无条件的清除溢位旗标(因为位元运算的范围也包括符号位元,清除溢位旗标表示符号位元有效),有些则不会变更溢位旗标,或是视为未定义行为。位元移位和乘法是对溢位有明确的定义,但各处理器不一定都会实施。例如X86指令只定义乘法和一位元位移下的溢位旗标,多位元位移则不定义。
Remove ads
参考资料
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads