[C/C++]算術演算子を用いずに2つの整数の加算を実現

1690 ワード

算術演算子ではなく、ビット演算子を用いて整数のバイナリ数を直接操作することが考えられ、整数加算では0+0=0、0+1=1、1+1=0となり、ここでは異或、与で実現することができ、具体的には以下のコードを見ることができる.整数が正の場合、次のコードは正確であることがわかりやすいが、整数が負の場合、機械数を考慮してそれらのコンピュータの原理知識を補符号で表す必要があり、コンピュータの原理を学んだことがある人はすべて知っていて、整数が補符号で表す場合、すべて同じ加算器を使うので、以下のものも負の数に使う.
 1 int add_no_arithm(int a, int b){
 2     if(b==0){
 3         return a;
 4     }
 5     else{
 6         int sum = a^b;
 7         int carry = (a&b)<<1;
 8         return add_no_arithm(sum,carry);
 9     }
10 }

 
参考文献
『王道プログラマー求職宝典』