两行代码的功能

时间:2010-07-27 15:26:27

标签: c++

当我尝试从现有程序中学习时,我无法理解以下两行代码会尝试做什么?

for(i=0;0==(x&1);++i)x>>=1;


if(0==(x-=y)) return y<<i;

任何解释都将不胜感激。

4 个答案:

答案 0 :(得分:9)

for(i=0;0==(x&1);++i)x>>=1

在整数

中查找设置为1的最低有效位
if(0==(x-=y)) return y<<i;

y中减去x,如果结果为0,则返回y向{更高位)移位i位。

答案 1 :(得分:4)

for(i=0;0==(x&1);++i)x>>=1;

此代码x>>=1正在将x的位移到右侧的位置。只要0==(x&1)为真,这将继续,这意味着x的最右位为0. i是移位的位数。

if(0==(x-=y)) return y<<i;

此代码从y中减去x。然后,如果x为0,则代码返回y向左移动i位。

答案 2 :(得分:0)

这是面试问题吗?

&lt;&lt;和&gt;&gt;运营商和&amp;所有按位操作都是如此。

从表面上看,第一个似乎向右移动直到找到1位,但是具有破坏性。

另一个人非常沮丧。

然而,如果没有更多的背景,目前尚不清楚该计划正在尝试做什么。

答案 3 :(得分:0)

如果x xy左移不定的i位置,则会返回x = 01010000

也就是说,如果y = 00000101x,它将返回{{1}}。如果不满足条件,问题中没有信息可以猜测它会返回什么。