C言語 longの使い方

この記事のポイント

この記事では、C言語のlong型について、基本的な概念から実際の使用方法まで詳しく説明しています。大きな整数を扱うことが多い開発実務では、欠かせない知識です。プログラミング初心者の方でも理解できるよう、具体的なコード例を交えながら解説しています。

  • C言語のlong型は大きな整数値を扱うためのデータ型
  • 基本的な宣言方法と初期化の書き方
  • 実際のプログラムでの活用場面と注意点

これらのポイントをしっかりと理解することで、C言語でのプログラミングの幅が大きく広がります。

目次

longとは?

C言語のlong型は、通常のint型よりも大きな整数値を格納できるデータ型です。一般的な環境では、int型は32ビット幅を持ち、最大で約21億までの整数を扱えます。これに対して、long型は64ビット幅を持ち、約922京という桁違いに大きな数値まで表現可能です。これにより、大容量のファイルサイズや膨大な計算結果、さらにはタイムスタンプといった、通常のint型では表現できない大きな数値を、安全かつ確実に扱えるようになります。

メモリ使用量はint型より増加しますが、表現可能な数値範囲が大幅に拡張されており、精密な計算処理や大規模データの扱いに不可欠です。long型には「%ld」という書式指定子を用いますので、詳しい使い方を見ていきましょう。

【関連】
C言語をもっと詳しく学ぶならpaizaラーニング

基本構文

long型を使うための構文はシンプルです。宣言は「long 変数名;」と書き、代入は通常の整数型と同様に記述します。

#include <stdio.h> int main() { long big_number = 1234567890L; long another_number; another_number = 9876543210L; printf("最大値:%ld\n", big_number); printf("参考値:%ld\n", another_number); return 0; }

出力結果

最大値: 1234567890
参考値: 9876543210

上記は、long型変数の宣言と初期化を行うコード例です。数値の末尾に「L」を付けることでlong型であることを明示し、printf関数では「%ld」書式指定子を使用してlong型の値を出力します。このようなlong型の基本操作をマスターすることが、より大きな数値を安全に扱うための鍵です。

実用例

ここからは、C言語におけるlong型の具体的な活用例をコードを通して確認していきましょう。日常的な開発で遭遇しやすいケースを取り上げ、それぞれの状況でlong型がどのように機能するかを解説していきます。

各例では、コードの動作原理と実行結果も併せて説明しており、初心者の方でも理解しやすい内容です。これらの例を通じてlong型が持つ便利さと、重要な役割を体感してください。

大きな数値の計算

大きな数値同士の掛け算では、結果がint型の範囲を超える場合があります。このような計算にlong型を使用します。

#include <stdio.h> int main() { // 飼育されている動物の数(5万頭) long animal_count = 50000L; // 1日あたりのエサの量(1,500g = 1.5kg) long food_per_animal_g = 1500L; // エサの総重量(グラム) long total_food_g = animal_count * food_per_animal_g; printf("1日に必要なエサの総重量: %ldg\n", total_food_g); printf("キログラム換算: %ldkg\n", total_food_g / 1000); return 0; }

出力結果

1日に必要なエサの総重量: 75000000g
キログラム換算: 75000kg

この例では、大きな数値同士の掛け算を行っています。もしint型を使用した場合、結果が範囲を超えてしまうかもしれません。そこで、long型を使うことで、正確な計算結果を得ています。特に統計データや大規模なシミュレーションでは、このような大きな数値の計算が頻繁に発生しますから、long型が大いに役立つわけです。

カウンタとしての利用

長時間稼働するプログラムでは、カウンタが大きな値になることがあります。long型を使うことで安全にカウントできます。

#include <stdio.h> int main() { long rabbit_jumps = 0L; int i; for (i = 0; i < 10000000; i++) { rabbit_jumps++; } printf("ウサギが跳んだ回数: %ld回\n", rabbit_jumps); return 0; }

出力結果

ウサギが跳んだ回数: 10000000回

このコードは、長時間動作するプログラムでのカウンタ使用例です。通常のint型では、約21億回までしかカウントできませんが、long型を使うことではるかに大きな値までカウントを続けることができます。サーバーやリアルタイムシステムなどで活用されています。

時間の管理

UNIXタイムスタンプなど、時間を秒数で表現する際にlong型がよく使われます。

#include <stdio.h> #include <time.h> int main() { long elephant_birth_time = 1609459200L; // 2021年1月1日 long current_time = (long)time(NULL); long age_in_seconds = current_time - elephant_birth_time; printf("ゾウの年齢: %ld秒\n", age_in_seconds); printf("これは約%ld日です\n", age_in_seconds / 86400); return 0; }

出力結果(例)

ゾウの年齢: 123456789秒
これは約1428日です

※出力結果は実行した時間ごとに異なります

このプログラムは、UNIXタイムスタンプを使った時間計算の例です。2021年1月1日からの経過秒数として表現される時間は、非常に大きな数値になるため、long型が適しています。日付や時刻の計算、ログファイルの管理などで広く使われています。

配列のインデックス

大きなデータセットを扱う際、配列のインデックスや要素数にlong型を使用することがあります。

#include <stdio.h> int main() { long tiger_count = 1000000L; long total_stripes = 0L; long i; for (i = 0; i < tiger_count; i++) { total_stripes += 100; // 1匹のトラに100本の縞 } printf("トラの総数: %ld匹\n", tiger_count); printf("縞模様の総本数: %ld本\n", total_stripes); return 0; }

出力結果

トラの総数: 1000000匹
縞模様の総本数: 100000000本

大規模なデータ処理では、配列の要素数やループの回数がint型の範囲を超える場合があります。こうしたケースでは、ループ変数やカウンタにはlong型を指定し、データの欠落を節で、処理の正確性を確保することが重要です。

ファイルサイズの管理

ファイルのサイズや位置を表現する際にも、long型が活用されます。

#include <stdio.h> int main() { long penguin_video_size = 2147483648L; // 2GB long available_space = 10737418240L; // 10GB if (penguin_video_size <= available_space) { printf("ペンギンの動画ファイル保存可能\n"); printf("ファイルサイズ: %ld バイト\n", penguin_video_size); printf("残り容量: %ld バイト\n", available_space - penguin_video_size); } else { printf("容量不足です\n"); } return 0; }

出力結果

ペンギンの動画ファイル保存可能
ファイルサイズ: 2147483648 バイト
残り容量: 8589934592 バイト

現代のファイルシステムでは、ギガバイト単位の大きなファイルを扱うことが一般的です。このようなファイルサイズは通常のint型では表現できないため、long型を使用してファイルサイズの管理や空き容量の計算を行います。

まとめ

C言語 long型は、int型の範囲を超える大きな整数を扱うために不可欠です。64ビットの領域を持ち、約922京まで格納可能なため、大規模なデータや精密な演算で活躍します。

longの活躍する場面

  • 大容量ファイルのサイズ管理やディスク容量計算
  • 時間処理におけるUNIXタイムスタンプの操作
  • 科学計算や統計処理での大きな数値演算
  • 長時間稼働システムでのカウンタ管理
  • データベースの主キーや一意識別子の生成

重要なポイント

long型を効果的に活用するために、必ずおさえておきたいポイントがあります。まず、メモリ使用量が int型の倍になる点を忘れず、必要な場面でのみ使用します。また、数値の入出力や記述を誤らないよう、printf関数では「\%ld」指定子を、数値リテラルには接尾辞「L」を付けるよう徹底しましょう。

  • 書式指定子「%ld」を使った正確な出力方法
  • メモリ効率を考慮した適切な使い分け
  • 数値リテラルでの「L」サフィックスの重要性
  • 異なるデータ型との演算における型変換の理解
  • オーバーフローを防ぐための事前チェック機能

これらの知識を活用することで、より堅牢で効率的なC言語プログラムの開発が可能になり、さまざまな分野での応用力の向上に役立ちます。

レベルを更に上げたい方はpaizaプログラミングスキルチェックへ

  1. paizaラーニングトップ
  2. リファレンス
  3. C言語のリファレンス記事一覧
  4. C言語 longの使い方