用移位和加減運算實現無符號整數除法

2021-06-06 03:25:50 字數 567 閱讀 7112

同樣是同學遇到的面試題,面試官問的原題是如何用移位和加減實現除以3的操作,在此略微擴充一下,實現無符號整數除法,但是返回值也為無符號整型。

方法一:類似小學學習的除法運算,從高位開始減去除數,此處用除數左移到跟被除數對齊,在相減之前商也同樣需要左移,**如下。

#include using namespace std;

unsigned int divide(unsigned int a, unsigned int b)

b >>= 1;

c >>= 1;

while(b >= _b)

b >>= 1;

c >>= 1;

} return d;

}int main()

return c;

}

方法三:利用魔數。**如下。

#include using namespace std;

int divide3(int a)

int main()

int main()

使用移位運算和加減法實現乘除法

這個想法是在做leetcode 的題目29 divide two integers時產生的,原題描述如下 divide two integers without using multiplication,division and mod operator.if it is overflow,retu...

用位運算實現整數的加減乘除運算

基本的c 位運算子有 與 或 取反 異或 右移 左移 等,眾所周知,採用位運算可以極大的提高 的執行效率。如果有的程式需要處理海量資料,其中又涉及大量簡單的加減乘除運算,則可以用位運算來進行操作,減少程式的執行時間。例如,a int a 5,b b a 3 cout b 即b a 3等價於b a 8...

位運算實現整數的加減乘數運算

用位運算實現加法也就是計算機用二進位制進行運算,32位的cpu只能表示32位內的數,這裡先用1位數的加法來進行,在不考慮進製的基礎上,如下1 1 01 0 1 0 1 10 0 0很明顯這幾個表示式可以用位運算的 來代替,如下 1 1 0 1 0 1 0 1 1 0 0 0 這樣我們就完成了簡單的一...