C言語のシフト演算とは?左シフト・右シフト・補数の基本をわかりやすく解説
問題
C言語を使用して、ある数値に対する左シフト・右シフト・補数(ビット反転)を求める簡単なプログラムを作成するには、どのようにすればよいのでしょうか。
解決方法
左シフト(<<)
変数の値を1ビットだけ左へシフトすると、その値は2倍になります。「a × 2」を計算したのと同じ結果です。
例:a = 10 の場合、a << 1 = 20

右シフト(>>)
変数の値を1ビットだけ右へシフトすると、その値は元の半分になります。「a ÷ 2」の整数除算と同じ結果です。
例:a = 10 の場合、a >> 1 = 5

サンプルプログラム
以下は、シフト演算子と補数演算子を使ったC言語のプログラム例です。
#include<stdio.h>
int main(void){
int a = 9;
printf("Rightshift of a = %d\n", a >> 1); // 9 ÷ 2 = 4
printf("Leftshift of a = %d\n", a << 1); // 9 × 2 = 18
printf("Compliment of a = %d\n", ~a); // -(9+1) = -10
printf("Rightshift by 2 of a = %d\n", a >> 2); // 9 ÷ 4 = 2
printf("Leftshift by 2 of a = %d\n", a << 2); // 9 × 4 = 36
return 0;
}
実行結果
上記のプログラムをコンパイルして実行すると、次のような出力が得られます。
Rightshift of a = 4 Leftshift of a = 18 Compliment of a = -10 Rightshift by 2 of a = 2 Leftshift by 2 of a = 36
ポイント解説
- a << n は「a × 2のn乗」、a >> n は「a ÷ 2のn乗」(小数点以下切り捨て)と等価です。
- 補数演算子 ~ はすべてのビットを反転させるため、~a = -(a + 1) という関係が常に成り立ちます。
- シフト演算は乗算や除算よりも高速に処理できるため、組み込み開発やパフォーマンスが重視される場面でよく活用されます。
-
C言語の文字操作を徹底解説!宣言方法と入出力関数の使い方
Cプログラミング言語において、文字(character)は英大文字(A〜Z)、英小文字(a〜z)、数字(0〜9)、空白(ホワイトスペース)、または特殊記号のいずれかとして扱われます。文字の宣言方法C言語で文字型変数を宣言する際は、char 型を使用します。文字定数はシングルクォーテーション( )で囲んで指定します。char a = A; /* 文字定数を使用した宣言 */このように宣言することで、変数 a に1文字分のデータを格納できます。文字入出力関数の種類C言語には、文字を入出力するための関数がいくつか用意されています。代表的なものは以下の3組です。scanf / printf: 書式指定
-
C言語の探索アルゴリズム解説|線形探索と二分探索の違いと実装例
探索(サーチ)とは、複数の要素で構成されるリストの中から、目的の「キー」となる要素を見つけ出す処理のことです。 リストの中に指定した要素が存在すれば、その探索は「成功」とみなされます。 指定した要素がリストに存在しなければ、その探索は「失敗(不成功)」となります。 C言語で広く使われている代表的な探索手法は、主に次の2つです。 線形探索(Linear Search/リニアサーチ) 二分探索(Binary Search/バイナリサーチ) 線形探索(Linear Search)とは 線形探索は、リストの先頭から順に要素を1つずつ取り出し、キーと一致するかどうかを確認していく、最も基本的な探