C/C++でビットを設定・クリア・反転する方法【サンプルコード付き】
ビットの設定(セット)、クリア(解除)、反転(トグル)は、C、C++、Pythonなど、ビット演算をサポートするすべてのプログラミング言語で、ビット単位の演算子を使って行うことができます。また、目的のビットを正しい位置へ移動させるために、シフト演算子も併用します。
ビットを設定する
特定のビットを1に設定するには、ビットごとのOR演算子(|)を使用します。1を対象の桁数分だけ左にシフトし、元の値とORを取ることで、その位置のビットを確実に1にできます。
例
#include<iostream>
using namespace std;
int main() {
int i = 0, n;
// 設定したいビット位置を入力
cin >> n;
i |= (1 << n); // i と「1 を n 桁左にシフトした値」の OR を取る
cout << i;
return 0;
}
出力
4 を入力すると、次の出力が得られます。
16
これは、16 が 2 進数で 10000 に相当するためです。入力した位置 n のビットが 1 に設定されていることがわかります。
ビットをクリアする
特定のビットを 0 にするには、ビットごとの AND 演算子(&)と NOT 演算子(~)を組み合わせて使用します。「1 を n 桁左にシフトした値」を NOT で反転させてマスクを作り、それと元の値の AND を取ることで、対象のビットだけを 0 にできます。
例
#include<iostream>
using namespace std;
int main() {
// i は 2 進数で 110
int i = 6, n;
// クリアしたいビット位置を入力
cin >> n;
i &= ~(1 << n); // シフトした 1 を否定した値との AND を取る
cout << i;
return 0;
}
出力
1 を入力すると、次の出力が得られます。
4
これは、2 進数の 110 の第 1 ビットがクリアされて 100 となり、10 進数では 4 に相当するためです。
ビットを反転(トグル)する
特定のビットの 0 と 1 を入れ替えるには、ビットごとの XOR 演算子(^)を使用します。XOR は同じ値同士なら 0、異なる値なら 1 を返すため、「1 との XOR」によって対象のビットだけが反転します。
例
#include<iostream>
using namespace std;
int main() {
// i は 2 進数で 110
int i = 6, n;
// 反転したいビット位置を入力
cin >> n;
i ^= (1 << n); // i と「1 を n 桁左にシフトした値」の XOR を取る
cout << i;
return 0;
}
出力
1 を入力すると、次の出力が得られます。
4
これは、2 進数の 110 の第 1 ビットが反転されて 100 となり、10 進数では 4 に相当するためです。
まとめ
ビット操作は、以下のように演算子を使い分けます。
- 設定(セット):i |= (1 << n) … 対象ビットを 1 にする
- クリア:i &= ~(1 << n) … 対象ビットを 0 にする
- 反転:i ^= (1 << n) … 対象ビットの 0/1 を入れ替える
これらのテクニックは、フラグ管理や組み込みプログラミング、競技プログラミングなどで頻繁に活用される、基本かつ重要な操作です。
-
C++でコンソール画面をクリアする方法をわかりやすく解説
C++のプログラムからコンソール(ターミナル)画面に表示された内容を消去したい場合、system()関数を使ってOSのコマンドを実行するのが一般的な方法です。この関数は標準ライブラリ<cstdlib>で定義されており、引数として渡した文字列をシェルコマンドとして実行してくれます。クリアに使うコマンドはOSによって異なります。Linux / macOS:POSIX環境で動作する「clear」コマンドを使用Windows:コマンドプロンプト用の「cls」コマンドを使用Linuxでコンソールをクリアするサンプルコード以下は、Linux環境で「clear」コマンドをsystem()関数に渡
-
KodiでVPNを設定する方法と、その必要性について徹底解説
Kodiをお使いですか?PCでも、Android端末でも、その他のデバイスでも構いません。動画ストリーミングに利用している方も多いでしょう。その利用形態がどうであれ、ExpressVPNのようなVPNサービスを併用することは非常に有効な対策となります。 これは法律の監視から逃れるための話ではありません。モバイルアプリでKodi経由のコンテンツを視聴する場合、VPNを使えば無料Wi-Fi接続中のデータを保護できます。また、Netflix、BBC iPlayer、YouTubeなどのサービスにおける地域制限(ジオブロック)を回避する手段としても活用できるのです。 VPNが有効になっていると、データ