2010-07-27 99 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。如果條件沒有得到滿足,問題中沒有任何信息可以猜測它會返回什麼。