Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

算術演算子を使わずにC/C++で2つの数値を加算する方法

この記事では、+++--- などの算術演算子を使用せずに、2つの数値を加算する方法を解説します。

この問題は、バイナリ加算器(Binary Adder)のロジックを応用することで解決できます。デジタル回路の分野では、1ビットの2進数を加算するための「半加算器(Half Adder)」や「全加算器(Full Adder)」が古くから設計されてきました。これらの加算器を複数段にカスケード接続すれば、より大きな桁数の数値を扱える加算回路を構成できます。

加算器の内部では、まず2つの数値同士でXOR演算を行い、繰り上がり(キャリー)についてはAND演算によって求めます。ここでは、この仕組みをそのままソフトウェアとして実装し、2つの整数の加算を実現します。

アルゴリズムのポイント

  • XOR(^):繰り上がりを考慮しない部分和を求める
  • AND(&):繰り上がりが発生するビット位置を特定する
  • 左シフト(<< 1):繰り上がりを1ビット左に移動させ、次の桁へ反映させる

繰り上がりが0になるまでこれらの処理を繰り返すことで、最終的に変数 a に正しい合計値が格納されます。

サンプルコード

#include <iostream>
using namespace std;
int add(int a, int b) {
   while (b != 0) {         // 繰り上がりがなくなるまで繰り返す
      int carry = a & b;    // AND演算で繰り上がりを求める
      a = a ^ b;            // XOR演算の結果をaに格納
      b = carry << 1;       // 繰り上がりを1ビット左シフトしてbに格納
   }
   return a;
}
int main() {
   int a, b;
   cout << "Enter two numbers to add: ";
   cin >> a >> b;
   cout << "The result is: " << add(a, b);
   return 0;
}

実行結果

Enter two numbers to add: 56
23
The result is: 79
  1. PHPのbcadd()関数を使って2つの任意精度数値を加算する方法

    PHPでは、bcadd()という数学関数を使用することで、2つの任意精度(多倍長精度)の数値を正確に加算できます。bcadd()関数は、任意精度の2つの数値を文字列として受け取り、指定された桁数(スケール)に結果を揃えたうえで、その合計値を返します。通常の浮動小数点演算では発生しうる誤差を回避できるため、金額計算など高い精度が求められる場面で特に役立ちます。この関数を使用するには、PHPにBCMath拡張モジュールがインストールされている必要があります。構文string bcadd ( $num_str1, $num_str2, $scaleVal)パラメータbcadd()関数は、$num_s

  2. C#で一時変数を使わずに2つの数値を入れ替える方法(算術演算子を活用)

    C#で2つの変数の値を入れ替える(スワップする)場合、通常は一時変数(テンポラリ変数)を使用します。しかし、算術演算子を活用することで、一時変数なしでも値の交換が可能です。基本的な考え方まず、入れ替え対象となる2つの変数を用意します。val1 = 5; val2 = 10;次に、加算と減算を組み合わせた以下の手順で値を入れ替えます。val1 = val1 + val2; // val1に両方の合計を代入 val2 = val1 - val2; // 合計から元のval2を引くと、元のval1が残る val1 = val1 - val2; // 合計から新しいval2(元のval1)を引く