深入计算机系统-练习题2.44 补码运算
Posted grooovvve
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深入计算机系统-练习题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;
以上是关于深入计算机系统-练习题2.44 补码运算的主要内容,如果未能解决你的问题,请参考以下文章
深入理解计算机系统(2.4)------整数的表示(无符号编码和补码编码)