使用二进制补码表示二进制负数方法合理性的证明
2016-10-03 18:26
302 查看
使用二进制补码表示二进制负数方法合理性的证明
目录使用二进制补码表示二进制负数方法合理性的证明
二进制补码的定义
补码与反码的关系
定理 1
计算机中二进制负数
定理2
注释
二进制补码的定义
对k位的二进制数M的十进制值,我们可以表示为1M=ak−12k−1+ak−22k−2+...+a121+a020M=ak−12k−1+ak−22k−2+...+a121+a020
其中 ai=0或1ai=0或1
或采取更为紧凑的形式
M=∑i=0k−1ai2iM=∑i=0k−1ai2i
则我们把补码定义为
M补=2k−MM补=2k−M
而原来的M称为原码
补码与反码的关系
定义二进制数M的反码:M反=∑i=0k−1Ai2iM反=∑i=0k−1Ai2i
其中2
Ai={0,1,ai=1ai=0Ai={0,ai=11,ai=0
事实上,反码即为原码所有位数上 0 变成 1 ,1 变成 0 。
这里有一个显然的性质:原码加反码得数所有k个数位上全是1;若此时往原码加反码的得数上加 1 ,则刚好进到2k2k上。于是我们得到公式
M+M反+1=2kM+M反+1=2k
自然得到一下定理:
定理 1
补码等于反码加一证:因为
M+M补=2kM+M补=2k
M+M反+1=2kM+M反+1=2k
显然M补=M反+1M补=M反+1
计算机中二进制负数
现在讨论计算机中二进制负数的储存。我们给出以下定理定理2
在k位储存系统中,可以用负数绝对值的补码代替负数,使其在满足k位储存系统中的加法规律。证:利用定理一
设我们需要储存正数M的负值:- M
M+M反+1=2kM+M反+1=2k
然而第 2k2k 位(即第 k+1 位)不能被储存,剩下M+M反+1=0M+M反+1=0
所以−M=M反+1−M=M反+1
因此M反+1M反+1即为M的加法逆(负数)
于是计算机中在小于 2k2k 位的内存内(所谓的不“溢出”)我们可以用负数绝对值的补码代替负数。
注释
为了方便表述和理解,我们在整篇文章中都将采用值相同十进制数来表示二进制数,如M写成二进制即为:ak−1ak−2...a1a0ak−1ak−2...a1a0如k=4(4位),a3=0,a2=1,a1=1,a0=1k=4(4位),a3=0,a2=1,a1=1,a0=1
二进制数即为0111 ↩
比如0111的反码为1000
↩
相关文章推荐
- 负数的二进制表示方法
- 负数的二进制表示方法
- 看C语言编码转换----负数的二进制表示方法
- 负数的二进制表示方法
- 负数的二进制表示方法
- 负数的二进制表示方法
- 负数的二进制表示方法(正数:原码、负数:补码)
- 负数的二进制表示方法
- 看C语言编码转换--------负数的二进制表示方法
- 负数的二进制表示方法
- 负数的二进制表示方法
- 负数的二进制表示方法
- 负数的二进制表示方法
- 看C语言编码转换--------负数的二进制表示方法
- 负数的二进制表示方法
- 负数的二进制表示方法
- Java整数占几个字节,以及负数的二进制表示方法,以及Java的逻辑运算符>>和>>>的区别
- 负数的二进制表示方法
- 看C语言编码转换--------负数的二进制表示方法