利用位運算實現加 減 乘 除

2021-07-05 05:25:49 字數 736 閱讀 8497

加法其實主要問題是怎麼處理進製,當然我們可以每一位分別相加,然後用乙個變數來儲存下一位是否進製

private static int add(int a, int b) 

jinwei = 1;

}else if((numa | numb) > 0)

}else

減法無非就是加上乙個數的相反數

a x b ,如果把 b 寫成2進製表示,那麼就是  ax(b0x2^0) + a x(b1x2^1) .....  其中bi表示b的2進製中第i位為1或者0,然後我們知道,乙個數乘以2的k次方,就是左移k次。

private static int multi(int a, int b) 

a<<=1;

b>>=1;

} return ans;

}

除開符號(我們假設2個數都是正數),除法的話,最容易想到的就是,每次減乙個除數,看要減多少次使得被除數小於除數,就可以算出結果,但是有乙個更快速的方法,例如 11/ 5    ,  用二進位制表示  1011 / 0101   可以寫成   101<<1 + 1 ,起始就是說,有 2<<1 個101, 用上面那個方法我們可以一次性減去 2^k次方個除數。

private static int divide(int a, int b) 

} return res;

}

位運算實現加減乘除

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.整數加法 cpp view plain copy intadd inta,intb return a 我的思路主要是利用a 1的位運算就是最左端 從第0位開始向左 連續的1變為0,原先a中為0的位置最低那一位變為1。...