如何解决表达式“ x&x +1 << n”如何工作?
我正在阅读的文字说:
x&(x +(1
我尝试在python控制台中放置不同的值,然后发现:
>>> 5 & (5 + (1 << 2))
1
但是,当我尝试输入其他值而不是2时,答案为5。我尝试将值设置为1到7。
我尝试导出该表达式,但不能。
对此必须有什么合理的解释?以及它如何运作?
解决方法
我尝试将值设置为1到7 [n]
n = 0
也可以。实际上,让我们先来看一下这种情况。所以x & (x + 1)
。
如果x
为奇数,则x
的形式为a01 k (一些位字符串a
,后跟零,后跟{ {1}}个)。给它加1将处理所有尾随的并将其变成a10 k 。与k
并用新的尾随零来抵消旧的尾随,而新的1与旧的0一起出现。x
保持不变。换句话说:尾随的被重置。
如果a
是偶数,则对其加1不会进位,唯一的效果是最低有效位被设置。然后,与x
的AND会再次重置该位。总体上什么都没发生。
如果x
不为零,则好像n
的最低有效位不存在。加法不会影响它们,因此AND也不会。因此,总的来说,n
可以描述为“如果有一个从位置x & (x + (1 << n))
开始的游程,则将该游程归零,否则什么也不做。”
一个可能有趣的变体是n
,它首先使用x & (x + (x & -x))
来获取最低有效位的掩码,然后与原始表达式相同。那将找到第一个运行并重置它。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。