持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第11天,点击查看活动详情
方法一:采用一位符号位
设A的符号为As,B的符号为Bs,运算结果的符号为Ss,则溢出逻辑表达式为
V=AsBs_Ss+ _As_BsSs
若V=0,表示无溢出;
若V=1,表示有溢出。
逻辑表达式
与:如ABC,表示A与B与C仅当A、B、C均为1时,ABC为1 A、B、C中有一个或多个为0,则ABC为0
或:如A+B+C,表示A或B或C 仅当A、B、C均为0时,A+B+C为0 A、B、C中有一个或多个为1,则A+B+C为1 非:如_A,表示A非 若A为1,则 _A为0
若A为0,则 _A为1
背后的逻辑
之所以用这个表达式,是因为电路中有相应的硬件控制,与门、或门、非门
方法二:采用双符号位
设机器字长为8位(含1位符号位),A=15,B=-24,求[A+B]补和[A-B]补
C= 124,求[A+C]补和[B-C]补
[A+C]补=0,0001111+0,1111100 = 1,0001011 真值-117 [B-C]补=1,1101000+1,0000100 = 0,1101100 真值+108 正确的符号位 实际的符号位
采用双符号位
正数符号为00,负数符号为11 [A+C]补=00,0001111+00,1111100 = o1,0001011 上溢
[B-C]补=11,1101000+ 11,0000100=10,1101100 下溢 记两个符号位为Ss1 Ss2,则V=Ss1 + Ss2 若V=0,表示无溢出; 若V=1,表示有溢出。
[A+B]补=00,0001111+11,1101000= 11,1110111 [A-B]补=00,0001111+00,0011000=00,0100111
符号位补码又称:模补码
单符号位补码又称:模2补码
注意:双符号位不会增加符号位的存储
实际存储时只存储1个符号位,运算时会复制一个符号位
溢出:同号的数字相加得到异号的数字
符号扩展:反码的最后一个1的前面与反码规则一样,这个1和后面的数字与原码保持一致