【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;
-
【C言語】ビット演算子を使って2倍・半分を計算する方法
ビット演算子は、オペランドのビット単位(2進数の各桁)に対して直接操作を行う演算子です。シフト演算を活用すると、掛け算や割り算を高速に処理できるため、組み込み開発やパフォーマンスが求められる場面でよく使われます。C言語の主なビット演算子一覧演算子説明&ビットごとのAND(論理積)|ビットごとのOR(論理和)^ビットごとのXOR(排他的論理和)<<左シフト>>右シフト~1の補数(ビット反転)AND演算の真理値表ビットごとのANDaba & b000010100111OR演算の真理値表ビットごとのORaba | b000011101111XOR演算の真理値表
-
C++プログラムから外部アプリケーション(メモ帳など)を起動する方法
この記事では、C++プログラムを使ってメモ帳(Notepad)などのサードパーティ製アプリケーションを起動する方法を解説します。実装は非常にシンプルで、コマンドプロンプトで使うコマンドをそのままC++から呼び出すだけで実現できます。ポイントとなるのは、標準ライブラリの system() 関数です。この関数の引数にアプリケーション名(コマンド)を文字列として渡すと、OSがそのコマンドを実行し、対応するアプリケーションが起動します。サンプルコード#include <iostream> using namespace std; int main() { cout <<