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

C言語でlong型が必要な理由とは?整数型のサイズとアーキテクチャの関係を解説

C言語やC++には、整数値を扱うためにshortintlonglong longという4つの異なるデータ型が用意されています。それぞれが占めるメモリ領域のサイズは異なり、その大きさはCPUのアーキテクチャやオペレーティングシステムによって変化します。

例えば、int型は環境によって4バイトの場合もあれば、2バイトの場合もあります。これはコンパイラの違いによっても生じるため、クロスコンパイラを使用する場面では特に注意が必要です。

クロスコンパイラとは

クロスコンパイラとは、現在実行中のプラットフォームとは別のプラットフォーム向けにコードをコンパイルできるコンパイラのことです。つまり、同じソースコードでも、32ビットシステムと64ビットシステムでは生成される結果が異なる可能性があります。

各整数型のサイズを確認するサンプルコード

以下のコードを実行すると、使用している環境における各データ型のサイズを確認できます。

#include<stdio.h>
int main() {
    printf("Size of int : %ld Bytes\n", sizeof(int));
    printf("Size of long : %ld Bytes\n", sizeof(long));
    printf("Size of long long : %ld Bytes", sizeof(long long));
}

実行結果(例)

Size of int : 4 Bytes
Size of long : 4 Bytes
Size of long long : 8 Bytes

この例からも分かるように、long型のサイズはコンパイラや実行環境によって変わります。では、なぜこのような違いが生じるのでしょうか。

CPUとメモリの仕組みから見た理由

CPUは主記憶装置(RAM)からデータを読み出す際、まずメモリアドレスレジスタ(MAR)にアドレスを指定します。該当する場所が見つかると、データはメモリバッファレジスタ(MBR)に転送され、その後CPU内部のレジスタに格納されて利用されます。

ここで重要なのは、データバスの幅がCPUレジスタのサイズを決定するという点です。32ビットシステムの場合、一度に読み出せるデータは4バイトまでです。それより大きなデータを扱う場合は、2回のサイクルに分けてアクセスすることになります。

したがって、小さなデータであればパフォーマンスに差はほとんどありませんが、より大きな数値を正確かつ効率的に扱いたい場合には、long型やlong long型のような大きなサイズのデータ型が必要になるのです。プラットフォーム間での移植性を考慮する際も、これらの型のサイズ差を理解しておくことが重要です。

  1. Pythonのデータ型変換関数一覧と使い方|int・str・floatなどをわかりやすく解説

    Pythonにおけるデータ型変換とはPythonでは、処理の中であるデータ型から別のデータ型へ値を変換したい場面がよくあります。たとえば、ユーザー入力として受け取った文字列を数値として計算したり、数値を読みやすい形で文字列に整えたりするケースです。Pythonの型変換(キャスト)は非常にシンプルで、型名をそのまま関数のように呼び出すだけで実行できます。組み込みの変換関数が多数用意されており、いずれも変換結果を表す新しいオブジェクトを返すのが特徴です。主な型変換関数の一覧以下に、Pythonで利用できる代表的なデータ型変換関数をまとめました。No.関数説明1int(x [, base])xを整数

  2. Pythonの辞書(dict)型とは?キーと値でデータを扱う基本を解説

    Pythonの辞書(dict)は、いわゆるハッシュテーブルの一種です。Perlなどの言語で見られる連想配列やハッシュと同じように動作し、キー(key)と値(value)のペアでデータを管理します。キーにはほぼすべてのPythonの型を使用できますが、一般的には数値や文字列が使われます。一方、値には任意のPythonオブジェクト(文字列、数値、リスト、タプルなど)を自由に格納できます。辞書の基本的な使い方辞書は波括弧({ })で囲んで定義し、各要素へのアクセスや代入には角括弧([ ])を使います。以下に具体的な例を示します。#!/usr/bin/python3 # 空の辞書を作成 d = {}