當我試圖從現有程序中學習時,我無法理解以下兩行代碼試圖做什麼?兩行代碼的功能
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