当我试图从现有程序中学习时,我无法理解以下两行代码试图做什么?两行代码的功能
for(i=0;0==(x&1);++i)x>>=1;
if(0==(x-=y)) return y<<i;
任何解释将不胜感激。
当我试图从现有程序中学习时,我无法理解以下两行代码试图做什么?两行代码的功能
for(i=0;0==(x&1);++i)x>>=1;
if(0==(x-=y)) return y<<i;
任何解释将不胜感激。
for(i=0;0==(x&1);++i)x>>=1
查找在整数
if(0==(x-=y)) return y<<i;
相减y
从x
设置为1
最低显著位,并且如果结果是0,则返回y
通过i
偏移了(朝向更显著比特)位。
第一位是最低位(最右边) – 2010-07-27 15:32:01
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;
此代码减去从x
y
。然后,如果x
为0,则代码返回y
向左移位01位。
这是面试的问题吗?
< <和>>运营商和&也都是按位运算。从表面上看,第一个似乎向右移动直到找到1位,但是具有破坏性。
另一个是相当有说服力的。
但是,没有更多的上下文,它不清楚该程序试图做什么。
将返回x
如果x
是y
左移了一个不确定的i
职位数。
也就是说,如果x = 01010000
和y = 00000101
它将返回x
。如果条件没有得到满足,问题中没有任何信息可以猜测它会返回什么。
如果条件不满足,函数将返回什么? – 2010-07-27 15:35:31