位運算實現加減乘除

2021-08-02 03:37:39 字數 1267 閱讀 1022

位運算的思想可以應用到很多地方,這裡簡單的總結一下用位運算來實現整數的四則運算。

1.整數加法

[cpp]view plain

copy

intadd(

inta,

intb)    

return

a ;    

}    

我的思路主要是利用a+1的位運算就是最左端(從第0位開始向左)連續的1變為0,原先a中為0的位置最低那一位變為1。

在不同的位上加1,那就是從相應的位開始向左計算,右邊不變。

下面還有乙個網上的思路,我覺得這個更好:

[cpp]view plain

copy

intadd(

inta,

intb)    

我簡化一下:

[cpp]view plain

copy

intadd(

inta,

intb)    

上面的思路就是先不計進製相加,然後再與進製相加,隨著遞迴,進製會變為0,遞迴結束。

2.整數減法

這個和加法一樣了,首先取減數的補碼,然後相加。

[cpp]view plain

copy

intminus(

inta,

intb)    

3.整數乘法

乘法就是將乘數寫成(2^0)*k0 + (2^1)*k1 + (2 ^2)*k2 + ... + (2^31)*k31,其中ki為0或1,然後利用位運算和加法就可以了。

[cpp]view plain

copy

intmul(

inta,

intb)    

4.整數除法

除法就是由乘法的過程逆推,依次減掉(如果夠減的話)divisor << 31、divisor << 30、... 、divisor << 2、divisor << 1、divisor(要保證不能溢位)減掉相應數量的除數就在結果加上相應的數量。

[cpp]view plain

copy

intdiv(

intdividend, 

intdivisor)   

}  return

sign*quotient;  

}  

位運算實現加減乘除

include include 加法運算 int add int a,int b 補碼中正數轉負數的原理 int negative int a 減法運算 int sub int a,int b 判斷正負 bool isnegative int a 僅計算正數乘法 int multi help int...

位運算實現加減乘除

關於邏輯右移和算術右移 vs中,對於unsigned型別,是邏輯右移,對於signed,算術右移 加法器的實現 對於不考慮進製的加法 0 0 0 1 0 1 0 1 1 1 1 0 即是異或運算 考慮進製 0 0 1 0 0 0 1 0 1 1 1 即是與運算 以下程式,a即不考慮進製部分,b為進製...

位運算實現加減乘除

資料在計算機記憶體中是以二進位制儲存的。幾種常用的位運算 與運算 對應位均為1時為1,其它為0。或運算 對應位均為0時為0,其它為1。異或運算 對應位不相同時為1,相同時為0.按位取反 每一位取反 右移 將二進位制進行右移,低位丟掉,高位補零。左移 以0111 0101為例,觀察異或運算和與運算的結...