同樣是同學遇到的面試題,面試官問的原題是如何用移位和加減實現除以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 這樣我們就完成了簡單的一...