2010-07-27 56 views
5

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

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


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

任何解释将不胜感激。

+0

如果条件不满足,函数将返回什么? – 2010-07-27 15:35:31

回答

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

查找在整数

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

相减yx设置为1最低显著位,并且如果结果是0,则返回y通过i偏移了(朝向更显著比特)位。

+1

第一位是最低位(最右边) – 2010-07-27 15:32:01

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;

此代码减去从xy。然后,如果x为0,则代码返回y向左移位01​​位。

0

这是面试的问题吗?

< <和>>运营商和&也都是按位运算。从表面上看,第一个似乎向右移动直到找到1位,但是具有破坏性。

另一个是相当有说服力的。

但是,没有更多的上下文,它不清楚该程序试图做什么。

0

将返回x如果xy左移了一个不确定的i职位数。

也就是说,如果x = 01010000y = 00000101它将返回x。如果条件没有得到满足,问题中没有任何信息可以猜测它会返回什么。