对二进制加减法与规格化的思考

定义:(下图来自课程链接-第91p)

学完二进制加减法、原码、补码、反码、移码、规格化之后
我发现它们之中有些运算有一些特殊的共性
我们可以将加减法、原码、补码、反码、移码、规格化看作是一个个运算
而这些运算之间有“兼容性”
比如[[x]原]补+[[y]原]补= [[x]原+[y]原]补,原码运算与补码运算“兼容”,换句话说就是补码运算没有破坏保持了加减法,这也是补码运算能用于加减法的原因

从这条性质出发,设x、y为8位有符号二进制数且x为负数,有如下公式
[[x]原]补+[[y]原]补= [[x]原+[y]原]补= [0]补=100000000(10000000溢出等价于0)
[[x]原]补=100000000-[[y]原]补= [[[y]原]补]反+1

再来看看规格化
[[x]原]归=[[[x]补]归]原
[[x]补]归=[[[x]原]归]补
[[x]反]归=[[[x]原]归]反
[[x]反]归=[[[x]补]归]反
……

可以看出规格化也没有破坏原、补、反之间的运算
于是就能解释
s>0时
原、补、反码相同,所以规格化后也相等
s<0时
原码取补码的规则为,取反+1,在这样规则下
补码最高位一般来讲是1,与原码相反
补码最低位一般来讲是0,与原码相同,
于是有[[x]补]归=1.0……
反码同理[[x]反]归=1.0……

但也有例外:
1、当最高位最低位重合,就不是取反了,规格化原码对应的补码就不是规格化的(1.1的补码还是1.1)
第二种解释:原码取补码是先取反,再加1,一般来说,这个加1不会影响最高位的取反,但是规格化原码1.1000000对应的补码是(1.1000000=1.(0111111+0000001))就影响到了最高位

2、在有符号数的补码表示里,负数总比正数多一个,在定点小数里,-1就是这样的存在,它的补码形式是:1.0000000,我们可以试着用补码验证一下它有没有原码,它的用原码求法求出原码为:(10.0000000=1.(1111111+0000001)),会发现原码溢出了,所以在有符号小数里边-1,而没有原码(扩张一下就是有符号数的最大负数没有原码)

可通过下述方式证明
最大负数补码x求对应原码x1
——>x1越界证明
——>无原码


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部