这里说的溢出,是指:数值过大,超出了编码所能表示的范围。
本质上,任何形式的计数,都是有可能溢出的。
在 Intel 设计的 CPU 中,有两个标志位:CF、OF(Over Flag)。
每当无符号数的运算出现了溢出,就会有 CF=1,翻译过来就是:进位。
每当有符号数溢出了,则 OF=1,称为 OVER,翻译过来就是:溢出。
按照 Intel 的论调,就是说:
所谓的“溢出”,是特指“有符号数的运算”。
无符号数的溢出,就不叫溢出了,必须得叫做“进位”
这说法,有些“反人类”哈!
没有办法,人家是大佬嘛,说的对不对,也必须得这么执行。
---------------------
所以,在计算机领域:
有符号数,才有可能出现溢出的。
溢出的特征,是“符号位出错”。
如:正数+正数,却得出了负数、 ... 。
无符号数,是没有溢出的,它只有“进位借位”。
而有符号数的运算,就不必关心进借位了。
采用双符号位检测溢出的方法:在运算时,两个符号位同时参加运算,结果中如果两个符号位不同,则表示产生了溢出。若符号为01,则表示运算结果大于允许取值范围的最大正数,称为正溢出;若符号位为10,则表示运算结果是负数,其值小于允许取值范围的最小负数,称为负溢出。两个符号位的最高位仍为正确的符号。
mov al,80h (al)=80h= 10000000B
add al,80h (al)=a0h= 100000000B 1 al=0<127所以of为 1
mov al,0FCH (al)=FCH= 11111100B 1 1
add al,05H (al)=101H= 100000001B 1 al=1<128所以OF为 1你是口算的吧,用计算机算算。
请参考