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

【C++】ビット演算子だけで加算を実現するプログラムの書き方

ビット演算子とは

ビット演算子とは、数値を構成する個々のビットを直接操作するための演算子です。代表的なものには、ビットAND(&)、ビットOR(|)、ビットXOR(^)、左シフト(<<)などがあります。
本記事では、これらのビット演算子を活用して、「+」演算子を使わずに加算(足し算)を実現するC++プログラムを紹介します。

サンプルプログラム

#include<iostream>
using namespace std;
int main() {
    int num1, num2, carry;
    cout << "Enter first number:" << endl;
    cin >> num1;
    cout << "Enter second number:" << endl;
    cin >> num2;

    while (num2 != 0) {
        carry = num1 & num2;
        num1 = num1 ^ num2;
        num2 = carry << 1;
    }
    cout << "The Sum is: " << num1;
    return 0;
}

実行結果

上記のプログラムを実行すると、以下のような出力が得られます。

Enter first number:11
Enter second number: 5
The Sum is: 16

プログラムの解説

1. 数値の入力

まず、ユーザーから2つの整数を入力として受け取ります。

cout << "Enter first number:" << endl;
cin >> num1;

cout << "Enter second number:" << endl;
cin >> num2;

2. ビット演算による加算処理

続いて、whileループの中でビットAND・ビットXOR・左シフト演算子を組み合わせて加算を行います。

while (num2 != 0) {
    carry = num1 & num2;
    num1 = num1 ^ num2;
    num2 = carry << 1;
}

それぞれの行の役割は次の通りです。

  • carry = num1 & num2; … ビットANDにより、両方のビットが1になっている桁(=繰り上がりの発生箇所)を検出します。
  • num1 = num1 ^ num2; … ビットXORにより、繰り上がりを考慮しない「部分和」を求めます。
  • num2 = carry << 1; … 繰り上がりを1ビット左へずらし、次の加算対象として設定します。

この処理を繰り上がりがなくなる(num2が0になる)まで繰り返すことで、繰り上がりも反映された正しい合計値が得られます。

3. 結果の表示

最後に、計算された合計値を出力します。

cout << "The Sum is: " << num1;
  1. 【C言語】ビット演算子を使って2倍・半分を計算する方法

    ビット演算子は、オペランドのビット単位(2進数の各桁)に対して直接操作を行う演算子です。シフト演算を活用すると、掛け算や割り算を高速に処理できるため、組み込み開発やパフォーマンスが求められる場面でよく使われます。C言語の主なビット演算子一覧演算子説明&ビットごとのAND(論理積)|ビットごとのOR(論理和)^ビットごとのXOR(排他的論理和)<<左シフト>>右シフト~1の補数(ビット反転)AND演算の真理値表ビットごとのANDaba & b000010100111OR演算の真理値表ビットごとのORaba | b000011101111XOR演算の真理値表

  2. C++プログラムから外部アプリケーション(メモ帳など)を起動する方法

    この記事では、C++プログラムを使ってメモ帳(Notepad)などのサードパーティ製アプリケーションを起動する方法を解説します。実装は非常にシンプルで、コマンドプロンプトで使うコマンドをそのままC++から呼び出すだけで実現できます。ポイントとなるのは、標準ライブラリの system() 関数です。この関数の引数にアプリケーション名(コマンド)を文字列として渡すと、OSがそのコマンドを実行し、対応するアプリケーションが起動します。サンプルコード#include <iostream> using namespace std; int main() { cout <<