深入计算机系统 练习题2.44 补码运算

int x = foo(); //任意值

int y = bar(); //任意值

unsigned ux =x;

unsigned uy = y;

 

证明对于所有的x和y值,它都为真(等于1);

或者2)给出使得它为假(等于0)的x和y的值。

1)x+y == uy+ux

答:这个等式成立,首先这个比较是在位级运算层面的比较。补码和无符号加法有相同的位级行为,也就是从位级层面来看,它们是完全相同的。

 

 

2)x*~y + uy*ux == -x

很显然,这也是位级层面的比较。既然已知x+y == uy+ux,不妨把整个等式统一成补码的角度来看。即x*~y + y*x == -x;然后~y=-y-1,这样等式就成立了。

举个例子 y=5, 假设w=4,即位长为4位,则y的二进制补码表示为0101;

-y=-5,其补码表示为1011;

-y-1,其补码表示为1010;

~y 是按位取反运算 表示为 1010;

可以发现~y=-y-1;

 

转载于:https://www.cnblogs.com/grooovvve/p/10325897.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值