記事内にはプロモーションが含まれています

【C言語】2乗・累乗の書き方は?pow関数の使い方や演算子による高速化

【C言語】2乗・累乗の書き方は?pow関数の使い方や演算子による高速化 C言語

C言語で数値計算をしていると、必ずと言っていいほど「2乗($x^2$)」や「累乗($x^n$)」の計算が必要になります。

しかし、PythonやFortranのような他の言語に慣れていると、つい x ** 2x ^ 2 と書いてしまい、コンパイルエラーになったり、全く違う計算結果(排他的論理和)になって驚いたりすることがあります。

実は、C言語には「2乗や累乗を計算する専用の演算子」が存在しません。

そのため、単純な掛け算を使うか、標準ライブラリの関数を呼び出す必要があります。

この記事では、C言語で2乗・累乗を計算するための3つの方法(掛け算、pow関数、ビット演算)について、それぞれのメリット・デメリットや使い分けを、サンプルコード付きで詳しく解説します。

【本記事の信頼性】
プロフィール
執筆者:マヒロ
  • 執筆者は元エンジニア
  • SES⇒大手の社内SE⇒独立
  • 現在はプログラミングスクールを運営
  • モットーは「利他の精神」
💻 本記事の検証環境(2026年2月確認)
  • OS:Windows 11 / macOS Sequoia
  • IDE:Visual Studio / VS Code / IntelliJ IDEA
  • その他:Chrome DevTools / 各言語最新安定版

※本メディアでは、上記環境にてコードの動作と情報の正確性を検証済みです。

方法1:単純な「2乗」なら「掛け算」が最強

「ある変数を2乗したい」というだけの場面であれば、最も簡単かつ高速な方法は、シンプルに 「自分自身を掛ける」 ことです。

最も基本的で高速な書き方

#include <stdio.h>

int main(void) {
    int num = 5;
    int square;

    // 自分自身を掛けて2乗を計算
    square = num * num;

    printf("%d の2乗は %d です。\n", num, square);

    return 0;
}

実行結果

5 の2乗は 25 です。

num * num という単純な掛け算を行っています。

「なんだ、そんなことか」と思われるかもしれませんが、C言語においてこれが最も処理速度が速く、誤差が出ない確実な方法です。

後述する pow 関数は、内部で複雑な浮動小数点演算を行うため、単純な2乗や3乗程度であれば、x * xx * x * x と書く方がパフォーマンス的にも優れています。

方法2:汎用的な「累乗(n乗)」なら pow 関数

「2乗だけでなく、10乗や3.5乗など、任意の累乗を計算したい」という場合は、標準ライブラリ <math.h> に含まれる pow 関数 を使用します。

math.hをインクルードして使う

pow 関数は、double pow(double base, double exp) という定義になっており、第一引数に「底(基数)」、第二引数に「指数」を渡します。

#include <stdio.h>
#include <math.h> // pow関数を使うために必要

int main(void) {
    double base = 2.0;
    double exp = 10.0;
    double result;

    // 2の10乗を計算
    result = pow(base, exp);

    // %.0f で小数点以下を表示しない設定
    printf("%.0f の %.0f 乗は %.0f です。\n", base, exp, result);

    // 2乗根(ルート)の計算例
    printf("√2 (2の0.5乗) は %f です。\n", pow(2.0, 0.5));
    // sqrt関数を使っても同じ
    printf("sqrt(2) は %f です。\n", sqrt(2.0));

    return 0;
}

実行結果

2 の 10 乗は 1024 です。
√2 (2の0.5乗) は 1.414214 です。
sqrt(2) は 1.414214 です。

pow(2.0, 10.0) を呼び出すことで、$2^{10}$ を計算しています。

また、pow(2.0, 0.5) のように指数に小数を指定することで、ルート(平方根)の計算も可能です(専用の sqrt 関数を使うのが一般的ですが、pow でも代用できます)。

注意点:戻り値はdouble型
pow 関数の戻り値は常に double 型(浮動小数点数)です。
そのため、整数の計算(例:int a = pow(5, 2);)を行うと、ごく稀に浮動小数点の誤差により 24.9999... のような値になり、整数へのキャストで切り捨てられて 24 になってしまうリスクがあります。
整数の累乗を厳密に行いたい場合は、次の「自作関数」の方法を検討してください。

方法3:pow関数を使わずに整数で累乗計算する(自作関数)

pow 関数の誤差を避けたい場合や、ライブラリを使わずに実装したい場合は、for 文を使って自作の関数を作るのが確実です。

整数専用の累乗関数(mypow)

#include <stdio.h>

// 整数の累乗を計算する関数
long long my_pow(int base, int exp) {
    long long result = 1;
    for (int i = 0; i < exp; i++) {
        result *= base;
    }
    return result;
}

int main(void) {
    int base = 3;
    int exp = 4;

    // 自作関数で計算
    long long ans = my_pow(base, exp);

    printf("%d の %d 乗は %lld です。\n", base, exp, ans);

    return 0;
}

実行結果

3 の 4 乗は 81 です。

baseexp 回だけ繰り返し掛けるシンプルなループ処理です。

戻り値を long long 型にしているのは、累乗計算は値が爆発的に大きくなりやすく、通常の int 型(約21億まで)ではすぐにオーバーフローしてしまうためです。

整数の計算であれば、この方法が最も安全で正確です。

方法4:【応用】2のn乗なら「ビットシフト」が爆速

プログラミングの世界では、「2のn乗(2, 4, 8, 16, 32…)」を扱う場面が頻繁にあります。

この場合に限っては、掛け算も pow も使わず、ビットシフト演算子 << を使うのが常套手段です。

1を左にシフトして2の累乗を作る

#include <stdio.h>

int main(void) {
    int n = 8;
    
    // 1 を nビット左にシフトする = 2のn乗
    int result = 1 << n;

    printf("2の%d乗は %d です。\n", n, result);

    return 0;
}

実行結果

2の8乗は 256 です。

コンピュータ内部では数値は2進数で扱われています。

1 (2進数で 0000 0001)を左に1つずらすと 20000 0010)、2つずらすと 40000 0100)になります。

つまり、1 << n という記述は $2^n$ を計算するのと同義であり、CPUレベルで最も高速に処理されます。

ビットフラグの管理や、メモリサイズの計算などで頻出するテクニックです。

注意!「^」は2乗の演算子ではありません

C言語の初心者が最もハマりやすいのが、^ 演算子の扱いです。

多くの数式やテキストで 2^3 は「2の3乗」を表しますが、C言語において ^「排他的論理和(XOR)」 という全く別のビット演算を行う記号です。

#include <stdio.h>

int main(void) {
    // 期待する結果:2の3乗 = 8
    // 実際の結果:2(0010) XOR 3(0011) = 1(0001)
    int mistake = 2 ^ 3;

    printf("2 ^ 3 の結果: %d (8ではありません!)\n", mistake);
    
    return 0;
}

実行結果

2 ^ 3 の結果: 1 (8ではありません!)

エラーが出ずにコンパイルが通ってしまうため、計算結果がおかしい時の原因として見落としがちです。十分に注意しましょう。

C言語のスキルを活かして年収を上げる方法

以上、C言語での2乗・累乗の書き方について解説してきました。

なお、C言語のスキルがある場合には、「転職して年収をアップさせる」「副業で稼ぐ」といった方法を検討するのがおすすめです。

C言語を扱えるエンジニアは比較的希少価値が高く、転職によって数十万円の年収アップはザラで、100万円以上年収が上がることも珍しくありません。

なお、転職によって年収を上げたい場合は、エンジニア専門の転職エージェントサービスを利用するのが最適です。
今すぐ転職する気がなくとも、とりあえず転職エージェントに無料登録しておくだけで、スカウトが届いたり、思わぬ好待遇の求人情報が送られてきたりするというメリットがあります。
併せて、副業案件を獲得できるエージェントにも登録しておくと、空いている時間を活かして稼げるようなC言語の案件を探しやすくなります。

転職エージェントも副業エージェントも、登録・利用は完全無料なので、どんな求人や副業案件があるのか気になる方は、気軽に利用してみるとよいでしょう。
エンジニアのキャリア・スキルアップ相談窓口
当ブログの読者に選ばれている、実績豊富な転職エージェントを厳選しました。
【転職】年収・環境を改善したい
年収アップにこだわりたい方 (平均アップ額138万円の実績)
未経験・経験者問わず幅広く探したい方
業界に精通した担当者に相談したい方
ゲーム業界への転職を志望する方
エンジニア未経験からキャリアを築く方
【独立】フリーランスとして稼ぎたい
国内最大級のフリーランス案件数から比較したい方
週1〜3日など柔軟な働き方を希望する方
【学習】スキルに不安のある方向け(格安スクール「デイトラ」)