⼆进制有符号数运算及溢出判别
就是把符号位当作数据位⼀样处理。
我的注解:上⾯例⼦都是补码相加,其中例7左边正数补码是其本⾝,右边负数补码取反加⼀,进位是两加数每⼀位运算⾃⾝产⽣的进位。上⾯都是两个8bit相加,从左⾄右第⼀个bit位是符号位,第⼆个bit位是最⾼数值位,如果结果超出8bit,则超出的位不会在计算机中存储,因此造成溢出现象
//------------------------------------------------------------------------//
两个负数的补码相加
补码加法运算溢出判断三种⽅法:
[⽅法⼀]
Xf、Yf分别两个数的符号位,Zf为运算结果符号位。
当Xf =Yf =0(两数同为正),⽽Zf=1(结果为负)时,负溢出;
当出现Xf =Yf =1(两数同为负),⽽Zf=0(结果为正),正溢出.
[⽅法⼆]
Cs表⽰符号位的进位,Cp表⽰最⾼数值位进位,⊕表⽰异或。
若 Cs⊕Cp =0 ,⽆溢出;
若 Cs⊕Cp =1 ,有溢出。
[⽅法三]
⽤变形补码进⾏双符号位运算(正数符为00,负数符号以11)
若运算结果的符号位为"01",则正溢;
若结果双符号为10,则负溢出;
若结果的双符号位为00或11,⽆溢出。