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

來源:互聯網
上載者:User

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

1.整數加法

int Add(int a,int b)  {      for(int i = 1; i; i <<= 1)               if(b & i)                      for(int j = i; j; j <<= 1)                      if(a & j) a &= ~j;                  else {a |= j; break;}                            return a ;  }  

我的思路主要是利用a+1的位元運算就是最左端(從第0位開始向左)連續的1變為0,原先a中為0的位置最低那一位變為1。
在不同的位上加1,那就是從相應的位開始向左計算,右邊不變。
下面還有一個網上的思路,我覺得這個更好:

int Add(int a,int b)  {  if(b == 0) return a;//沒有進位的時候完成運算  int sum,carry;  sum = a ^ b;//完成第一步沒有進位的加法運算  carry=(a & b) << 1;//完成第二步進位並且左移運算  return Add(sum,carry);//進行遞迴,相加  }  

我簡化一下:

int Add(int a,int b) { return b ?  Add(a ^ b,(a & b) <<1 ): a; } 

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

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

int Minus(int a,int b)  {      for(int i = 1; i && ((b & i) ==0 ); i <<= 1)        ;      for(int i <<= 1; i; i <<=1 )         b ^= i;      return Add(a,b);  }  

3.整數乘法

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

int Mul(int a,int b)  {      int ans = 0;      for(int i = 1; i; i <<= 1, a <<= 1)          if(b & i)              ans += a;  return ans;  } 

4.整數除法

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

int Div(int dividend, int divisor) {// assert(divisor != 0)int sign = 1;if(dividend < 0 && divisor > 0 || dividend > 0 && divisor < 0)sign = -1;unsigned int x = (unsigned int)abs(dividend);unsigned int y = (unsigned int)abs(divisor);int bitCnt = sizeof(int) << 3;int quotient = 0;int k = bitCnt-1;while(((1 << k) & y) == 0) k--;for(int j = bitCnt-1-k; j >= 0; j--){if(x >= (y << j)){x -= (y << j);quotient += (1 << j);}}return sign*quotient;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.