首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在两个补码系统中,表达式x &= (x-1)删除最右边的位?

为什么在两个补码系统中,表达式x &= (x-1)删除最右边的位?
EN

Stack Overflow用户
提问于 2022-10-22 02:37:32
回答 1查看 41关注 0票数 0

对不起,又一个K&R问题!练习2-9:在两个补码系统中,x &= (x - 1)删除x中最右边的1位。解释原因。

我解决了这个问题(我想是错误的),我决定删除超过最右边的1位。我知道,在两个补码中,负数是通过取补和加1来形成的,然后再加负数进行减法,然后丢弃高进位。

因此,让我们取x= 8,我将使用2个字节来表示简洁性:

X= 00001000

所以要做x-1,我们实际上是加-1?所以,1的补码是: 11111110,加上1,我们得到11111111。

那么我们有: 00001000 +11111111 = 00000111

这就是我们所期望的答案。接下来,我们将使用x的结果,并将其赋值为x: 00001000 &00000111 = 00000000

其中,我似乎犯了某种错误,因为超过正确的大部分被删除了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-22 02:58:47

你做得很好。我认为你只是误解了“最右边的1位”的含义(你一直在说“最右边的部分”,从最初的提示符中省略了“1位”)。

00001000只有一个1位。操作结束后,1位就消失了;正如您所显示的,剩下的是00000000。它完全按照它在tin上说的做,找到最接近右手边的1并清除它(该1位右侧的所有0位保持不变,左边的所有位都保持不变,无论它们是0还是1)。如果您用00110000计算出相同的数学,您会发现结果是00100000,移除最右边的1-bit,将其翻转到00111变成01100110变成0100等等。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74160717

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档