2013-04-13 107 views
1

要使用C(不是本地語言)中的乘法函數 - 必須使用按位運算符。試圖想出一個解決方案實現來替代返回0;使用無符號長整數運算

任何方向大加讚賞:

unsigned long multiply(unsigned int x, unsigned int y) { 
    return 0; 
} 
+1

記住,你是如何做到在小學乘法?就像那樣,但在基數2中。所有剩餘的乘數都是0或1(因爲基數爲2),所以問題被簡化爲移位和相加。 –

+0

這個問題不是完整的,它可能類似於它指的是重複的,但重複也是封閉的,所以參考它似乎使訪問者對這個問題必須工作一點更難。 –

回答

2

請參閱此鏈接瞭解bitwise operation

c := 0 
while b ≠ 0 
    if (b and 1) ≠ 0 
     c := c + a 
    left shift a by 1 
    right shift b by 1 
return c 

這應該可以幫助你很多,從這裏開始。所有你所要做的就是這個轉換這對你來說是一個很好的做法。

提示:

左移一個由1a<<=1;

如果(B 1)≠0可以寫爲:if (b&01)

+0

「如果(b和1)≠0可寫爲:if(b&01)」:RHS上的代碼是正確的,但LHS上的僞代碼是對代碼的不準確描述。 –

+0

請糾正我,我認爲它是一樣的,那麼它應該是什麼? – Maroun

+0

「和」通常被理解爲邏輯運算(即&&),而不是按位運算(即&)。在像這樣的表達式中,最好直接使用代碼,因爲精確的僞代碼更加冗長和不太清晰。 –