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

【C言語】ビット演算子を使って2倍・半分を計算する方法

ビット演算子は、オペランドのビット単位(2進数の各桁)に対して直接操作を行う演算子です。シフト演算を活用すると、掛け算や割り算を高速に処理できるため、組み込み開発やパフォーマンスが求められる場面でよく使われます。

C言語の主なビット演算子一覧

演算子説明
&ビットごとのAND(論理積)
|ビットごとのOR(論理和)
^ビットごとのXOR(排他的論理和)
<<左シフト
>>右シフト
~1の補数(ビット反転)

AND演算の真理値表

ビットごとのAND
aba & b
000
010
100
111

OR演算の真理値表

ビットごとのOR
aba | b
000
011
101
111

XOR演算の真理値表

ビットごとのXOR
aba ^ b
000
011
101
110

【C言語】ビット演算子を使って2倍・半分を計算する方法

ポイント:シフト演算による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にとって非常に軽量な処理であるという利点があります。

  1. C言語入門:ネストされたforループとbreak・continue・goto文の使い方を徹底解説

    ネストされたforループ(二重ループ)とは、forループの本体の中に、さらに別のfor文が含まれている構造のことです。表や行列の操作、九九のような組み合わせ処理など、「繰り返しの中でさらに繰り返しが必要な場面」でよく使われます。全体の繰り返し回数は、外側のループの繰り返し回数 × 内側のループの繰り返し回数で求められます。ネストされたforループのサンプルプログラム以下は、ネストされたforループを使用したC言語のプログラム例です。#include<stdio.h> main( ){     int i,j;   &nbs

  2. 【初心者向け】長方形の面積と外周を求めるC言語プログラムの書き方

    長方形の「長さ」と「幅」が与えられたとき、その面積と外周(周囲の長さ)を計算する方法を、C言語のサンプルコード付きでわかりやすく解説します。 長方形とは? 長方形とは、4つの辺と4つの直角(90度)を持つ2次元の図形です。長方形では、隣り合う辺の長さは異なりますが、向かい合う辺どうしは必ず同じ長さになります。また、2本の対角線も互いに等しい長さを持ちます。 下の図は長方形を模式的に表したものです。 ここで、Aは長方形の幅(breadth)、Bは長さ(length)を表しています。 面積と外周の計算式 面積の公式 長方形の面積は、次の式で求められます。 面積 = 長さ × 幅 外周の公式