深入探讨整数的原码与补码

深入探讨整数的原码与补码

1.按位取反加一操作用数学公式如何表示?

假设对一个四位二进制数[D4 D3 D2 D1]进行按位取反操作
	1111-[D4 D3 D2 D1]即是按位取反操作(1-0=1,即:将0取反;1-1=0,即:将1取反),
	然后加上0001即表示加一
	2^4=1111+0001
	故,按位取反加一操作可以表示为:1111-[D4 D3 D2 D1]+0001=2^4-[D4 D3 D2 D1]
由上例可知,对一个n位二进制数进行按位取反加一操作可以用数学公式表示为:
	2^n-[Dn D(n-1) .... D2 D1]
证明如下:
	2^n=11...11(n个1)+00...01(n-1个0,1个1)
	2^n-[Dn D(n-1) .... D2 D1]
	=11...11(n个1)-[Dn D(n-1) .... D2 D1]+00...01(n-1个0,1个1)
	
	11...11(n个1)-[Dn D(n-1) .... D2 D1]即是将[Dn D(n-1) .... D2 D1]按位取反
	+00...01(n-1个0,1个1)即是加1操作
	故,对一个n位二进制数进行按位取反加一的数学表达式为:2^n-[Dn D(n-1) .... D2 D1]

2.已知一个数的原码,如何求这个数的补码的数学表达式是?

设该数真值为m,绝对值为t,位数为n位
如果该数原码的符号位为0,此时m=t,则该数的补码就是原码,,数学表达式为
	[m]补=[m]原=0,t(位数为n+1位)
如果该数原码的符号位为1,此时m=-t,则该数的补码的数学表达式为
	[m]原=1,t
	[m]补=2^(n+1)-0,t,
	这个数学表达式的意思是
		对0,t的每一位进行按位取反加一操作,即可得到[m]补,也是[-t]补
		即:对原码除了符号位,其他位进行按位取反加一	

3.已知一个数的补码,如何获取该数相反数的补码?

设该数的真值为x,该数用二进制表示有n位(没有符号位)
比如:一数的真值为111,该数的位数为3
情况1:若x>=0
	x的原码和补码均为0,x(均是n+1位)
	对[x]补进行按位取反加一操作,即2^(n+1)-[x]补=2^(n+1)-0,x
	2^(n+1)-0,x正好是[-x]补
	即:若要取一个正数的相反数的补码,仅需在将该正数的补码进行按位取反然后加一操作
情况2:若x<0
	[x]原=1,fabs(x)
	[x]补=2^(n+1)-0,fabs(x)
	([x]补和[x]原均是n+1位)
	对[x]补进行按位取反加一操作,即2^(n+1)-[x]补=2^(n+1)-(2^(n+1)-0,fabs(x))=0,fabs(x)
	0,fabs(x)正好是[-x]补
综合情况1和情况2,已知一个数的补码,只需将该补码进行按位取反加一操作,即可获得该数相反数的补码。

4.请证明减去一个数的补码,等价于加上这个数相反数的补码。

将该问题分成两种情况讨论:
	情况1:被减数为正数
	情况2:被减数为负数

设M>=0,M是n位二进制数
情况1:被减数为正数
	-[M]补=-(0,M)=-(0,M)+2^(n+1)=[-M]补
情况2:被减数为负数
	-[-M]补=-((0,M)+2^(n+1))=-((0,M)+2^(n+1))+2^(n+1)=(0,M)=[M]补
总上述两种情况可知
	-[x]补=[-x]补(X既可以是正数,也可以是负数)

5.模拟计算机加减法运算

进行加减法时,只会有两个运算,取相反数的补码和加法,做加法,会连同符号位一起做加法
设两个n为二进制数为M、N,M>=0,N>=0
1.模拟加法:
	分三种情况讨论
		1.正数+正数(不考虑溢出)
			[M]补+[N]补=0,M+0,N=0,(M+N)
		2.正数+负数
			[M]补+[-N]补=0,M+(2^(n+1)-0,N)=2^(n+1)+0,M-0,N
			若M>=N,则[M]补+[-N]补=2^(n+1)+0,M-0,N=0,(M-N)=[M-N]补
			若M<N,则[M]补+[-N]补=2^(n+1)-0,fabs(M-N)=[M-N]补
		3.负数+负数(不考虑溢出)
			[-M]补+[-N]补=(2^(n+1)-0,M)+(2^(n+1)-0,N)
			=2^(n+2)-(0,M+0,N)(mod 2^(n+1))
			=2^(n+1)-(0,M+0,N)=[-(M+N)]补
			
2.模拟减法
	分四种情况讨论
		1.正数-正数
			[M]补-[N]补=[M]补+[-N]补(参见加法的情况2)
		2.正数-负数(不考虑溢出)
			[M]补-[-N]补=[M]补+[N]补(参见加法的情况1)
		3.负数-正数(不考虑溢出)
			[-M]补-[N]补=[-M]补+[-N]补(参见加法的情况3)
		4.负数-负数
			[-M]补-[-N]补=[-M]补+[N]补(参见加法的情况2)

3.实例模拟
	由上述的模拟加法和模拟减法知:只需考虑加法的情况即可
	计算机做加法,会连同符号位一起做加法
	设M、N为7位二进制正数,M=1001001=[73]二进制,N=0100100=[36]二进制,此时M>N
	1.正数+正数
		[M]补+[N]补=01001001+00100100=01101101=[M+N]补=[109]补
	2.正数-负数
		这里分两种情况
		1.[M]补-[N]补=[M]补+[-N]补
			[-N]补=11011100([N]补所有位按位取反加一)
			[M]补+[-N]补=01001001+11011100=00100101=[M-N]补=[37]补
		2.[N]补-[M]补=[N]补+[-M]补
			[-M]补=10110111([M]补所有位按位取反加一)
			[N]补+[-M]补=00100100+10110111=11011011=[-37]补
	3.负数+负数
		[-M]补+[-N]补
		[-M]补=10110111([M]补所有位按位取反加一)
		[-N]补=11011100([N]补所有位按位取反加一)
		[-M]补+[-N]补=10010011=[-109]补
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值