要使用C
(不是本地語言)中的乘法函數 - 必須使用按位運算符。試圖想出一個解決方案實現來替代返回0;使用無符號長整數運算
任何方向大加讚賞:
unsigned long multiply(unsigned int x, unsigned int y) {
return 0;
}
要使用C
(不是本地語言)中的乘法函數 - 必須使用按位運算符。試圖想出一個解決方案實現來替代返回0;使用無符號長整數運算
任何方向大加讚賞:
unsigned long multiply(unsigned int x, unsigned int y) {
return 0;
}
請參閱此鏈接瞭解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
這應該可以幫助你很多,從這裏開始。所有你所要做的就是這個轉換這對你來說是一個很好的做法。
提示:
左移一個由1是a<<=1;
。
如果(B 1)≠0可以寫爲:if (b&01)
「如果(b和1)≠0可寫爲:if(b&01)」:RHS上的代碼是正確的,但LHS上的僞代碼是對代碼的不準確描述。 –
請糾正我,我認爲它是一樣的,那麼它應該是什麼? – Maroun
「和」通常被理解爲邏輯運算(即&&),而不是按位運算(即&)。在像這樣的表達式中,最好直接使用代碼,因爲精確的僞代碼更加冗長和不太清晰。 –
記住,你是如何做到在小學乘法?就像那樣,但在基數2中。所有剩餘的乘數都是0或1(因爲基數爲2),所以問題被簡化爲移位和相加。 –
這個問題不是完整的,它可能類似於它指的是重複的,但重複也是封閉的,所以參考它似乎使訪問者對這個問題必須工作一點更難。 –