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

ポイント:シフト演算による2倍と半分の計算
2進数において、左に1ビットシフト(<<1)すると値は2倍になり、右に1ビットシフト(>>1)すると値は半分(整数除算)になります。これは「10進数で桁をずらすと10倍・1/10になる」のと同じ原理です。
サンプルプログラム
以下は、ビット演算子を使って入力された整数の2倍と半分を計算するCプログラムです。
#include<stdio.h>
main(){
int a;
printf("Enter a\n");
scanf("%d",&a);
printf("%d*2=%d \n",a,a<<1);
printf("%d/2=%d \n",a,a>>1);
}実行結果
このプログラムを実行すると、次のような出力が得られます。
Run 1: Enter a 45 45*2=90 45/2=22 Run 2: Enter a 65 65*2=130 65/2=32
解説
1回目の実行では45を入力したため、a<<1(左シフト)により90(45×2)、a>>1(右シフト)により22(45÷2の商)が出力されています。奇数の場合は切り捨てられる点に注意してください。同様に2回目では65が130と32になりました。このようにシフト演算は乗算・除算の代わりとして利用でき、CPUにとって非常に軽量な処理であるという利点があります。
-
C言語入門:ネストされたforループとbreak・continue・goto文の使い方を徹底解説
ネストされたforループ(二重ループ)とは、forループの本体の中に、さらに別のfor文が含まれている構造のことです。表や行列の操作、九九のような組み合わせ処理など、「繰り返しの中でさらに繰り返しが必要な場面」でよく使われます。全体の繰り返し回数は、外側のループの繰り返し回数 × 内側のループの繰り返し回数で求められます。ネストされたforループのサンプルプログラム以下は、ネストされたforループを使用したC言語のプログラム例です。#include<stdio.h> main( ){ int i,j; &nbs
-
【初心者向け】長方形の面積と外周を求めるC言語プログラムの書き方
長方形の「長さ」と「幅」が与えられたとき、その面積と外周(周囲の長さ)を計算する方法を、C言語のサンプルコード付きでわかりやすく解説します。 長方形とは? 長方形とは、4つの辺と4つの直角(90度)を持つ2次元の図形です。長方形では、隣り合う辺の長さは異なりますが、向かい合う辺どうしは必ず同じ長さになります。また、2本の対角線も互いに等しい長さを持ちます。 下の図は長方形を模式的に表したものです。 ここで、Aは長方形の幅(breadth)、Bは長さ(length)を表しています。 面積と外周の計算式 面積の公式 長方形の面積は、次の式で求められます。 面積 = 長さ × 幅 外周の公式