OF:最高位进位⊕次高位进位(对带符号数才有意义)
最
高
位
进
位
:
进
位
出
去
(
溢
出
去
)
\color {green}{最高位进位:进位出去(溢出去)}
最高位进位:进位出去(溢出去)
次
高
位
进
位
:
进
位
到
最
高
位
(
对
带
符
号
数
来
说
即
符
号
位
)
\color {green}{次高位进位:进位到最高位(对带符号数来说即符号位)}
次高位进位:进位到最高位(对带符号数来说即符号位)
CF: sub⊕C(⊕为异或,CF对无符号数才有意义)
作
减
法
则
s
u
b
为
1
\color {green}{作减法则sub为1}
作减法则sub为1
C
为
进
位
输
出
—
—
最
高
位
有
无
进
位
出
去
(
溢
出
去
)
\color {green}{C为进位输出——最高位有无进位出去(溢出去)}
C为进位输出——最高位有无进位出去(溢出去)
举例:
假设n=8,机器数X和Y的真值分别为x和y
OF:
来看带符号那一行:
0xB0——1011 0000 (-80) 0x8C——1000 1100(-116)
X+Y:0011 1100 (60)
8
位
机
器
数
表
示
范
围
[
127
,
−
128
]
,
负
溢
出
后
加
上
2
n
,
这
题
中
即
加
上
256
\color {green}{8位机器数表示范围 [127,-128] , 负溢出后加上2^n,这题中即加上256}
8位机器数表示范围[127,−128],负溢出后加上2n,这题中即加上256
−
80
−
116
+
256
=
60
\color {green}{-80-116+256=60}
−80−116+256=60
关于溢出的处理,可以参照这个博客:计算机内加减法的溢出处理
对
原
数
X
(
原
数
+
加
数
=
结
果
)
:
\color {red}{对原数X(原数+加数=结果):}
对原数X(原数+加数=结果):
最
高
位
进
位
为
1
(
最
高
位
1
+
1
,
进
位
)
,
次
高
位
没
有
进
位
(
0
+
0
)
,
1
⊕
0
=
1
,
则
O
F
为
1
\color {red}{最高位进位为1(最高位1+1,进位),次高位没有进位(0+0),1⊕0=1,则OF为1}
最高位进位为1(最高位1+1,进位),次高位没有进位(0+0),1⊕0=1,则OF为1
CF:
来看无符号那一行:
0xB0——1011 0000 (176) 0x8C——1000 1100(140)
X+Y:0011 1100 (60)
8
位
机
器
数
表
示
范
围
[
127
,
−
128
]
,
正
溢
出
后
减
去
2
n
,
这
题
中
即
减
去
上
256
\color {green}{8位机器数表示范围 [127,-128] , 正溢出后减去2^n,这题中即减去上256}
8位机器数表示范围[127,−128],正溢出后减去2n,这题中即减去上256
对
原
数
X
(
原
数
+
加
数
=
结
果
)
:
\color {red}{对原数X(原数+加数=结果):}
对原数X(原数+加数=结果):
加
法
,
s
u
b
=
0
\color {red}{加法,sub=0}
加法,sub=0
最
高
位
进
位
(
1
+
1
,
溢
出
去
了
)
,
进
位
输
出
C
=
1
\color {red}{最高位进位(1+1,溢出去了),进位输出C=1}
最高位进位(1+1,溢出去了),进位输出C=1
C
F
=
s
u
b
⊕
C
=
0
⊕
1
=
1
\color {red}{CF=sub⊕C=0⊕1=1}
CF=sub⊕C=0⊕1=1
最
后
一
提
:
计
算
机
对
带
/
无
符
号
数
的
机
器
码
统
一
处
理
\color {blue}{最后一提:计算机对带/无符号数的机器码统一处理}
最后一提:计算机对带/无符号数的机器码统一处理
O
F
,
C
F
等
标
志
位
是
由
机
器
码
运
算
结
果
决
定
的
,
是
否
为
带
符
号
数
并
不
影
响
\color {blue}{OF,CF等标志位是由机器码运算结果决定的,是否为带符号数并不影响}
OF,CF等标志位是由机器码运算结果决定的,是否为带符号数并不影响
所
以
,
才
会
有
带
不
带
符
号
它
的
O
F
,
S
F
,
C
F
都
一
样
\color {green}{所以,才会有带不带符号它的OF,SF,CF都一样}
所以,才会有带不带符号它的OF,SF,CF都一样
终极简单的判定方法:
求OF就把机器码转成带符号数然后运算,看有没有溢出
求CF同理,转成无符号数,然后运算看有没有溢出