原文 用位運算實現四則運算之加減乘除
//遞迴版本
int _add(int num1,int num2)
//遞迴簡化版本
int _add2(int num1,int num2)
//非遞迴版本
int _add3(int num1,int num2)
return num1;
}
兩數相加,和的部分可用「異或」完成,進製部分可用「與」完成,因為進製是進到下一位的,所以將進製左移一位後與和再加,直到進製為0。
//減法即加上減數的補碼
int negtive(int a)
int _substraction(int a,int b)
// 加減乘除位運算
// 程式中實現了比較大小、加減乘除運算。所有運算都用位操作實現
// 在實現除法運算時,用了從高位到低位的減法
// 具體如下,演算法也比較簡單,所以沒有作注釋
#include#includeusing namespace std;
int add(int a, int b)
return a;
}//這個和加法一樣了,首先取減數的補碼,然後相加。
int negtive(int a) //取補碼
int sub(int a, int b)
// 判斷正負
int ispos( int a )
int isneg( int a )
int iszero( int a )
//正數乘法運算
int pos_multiply(int a,int b)
return ans;
}//乘法運算
int multiply(int a,int b)
return negtive( pos_multiply( negtive(a), b ) );
} return negtive( pos_multiply(a, negtive(b)) );
}//除法就是由乘法的過程逆推,依次減掉(如果x夠減的)y^(2^31),y^(2^30),...y^8,y^4,y^2,y^1。減掉相應數量的y就在結果加上相應的數量。
int pos_div(int x,int y)
return (c&a);
} // 比較兩個數的大小
int isbig( int a, int b )
return 0;
} if( isneg(b) )
return 1;
return isbig_pos(a, b);
}
用位運算實現四則運算之加減乘除
加法運算 cpp view plain copy intaddwithoutarithmetic intnum1,intnum2 簡化一下 cpp view plain copy intadd inta,intb 上面的思路就是先不計進製相加,然後再與進製相加,隨著遞迴,進製會變為0,遞迴結束。非遞...
用位運算實現四則運算之加減乘除
按位異或 按位與 按位或 計算機系統中,數值一律用補碼來表示 因為補碼可以使符號位和數值位統一處理,同時可以使減法按照加法來處理。對補碼做簡單介紹 數值編碼分為原碼,反碼,補碼,符號位均為0正1負。原碼 補碼 數值位取反加1 補碼 原碼 對該補碼的數值位繼續 取反加1 補碼 的絕對值 稱為真值 正數...
用位運算實現四則運算之加減乘除
加法運算 int addwithoutarithmetic int num1,int num2 簡化一下 int add int a,int b 上面的思路就是先不計進製相加,然後再與進製相加,隨著遞迴,進製會變為0,遞迴結束。非遞迴的版本如下 int add int a,int b return ...