Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

C言語 データ型モデルを意識した型の情報一覧

データ型モデル

型の最大値、最小値の一覧等まとめているサイトは多いですが、データ型モデルのことに触れずに書いているサイトが多いのでまとめて見ました。

OSではデータ型モデルと呼ばれる環境の定義規約によって基本型のサイズが定められています。
ここで64bitの主な環境について述べます。

LLP64 LP64
char 8 8
short 16 16
int 32 32
long 32 64
long long 64 64
void * 64 64

LLP64

ポインターのみを64ビット化したもの。
Microsoft Windowsの64ビット版(Win64)で採用されたデータ型モデル

ソースの互換性が高く64ビット化において最も問題が少ないと考えられている。

long long と pointer が64bit。

LP64

64ビット実装モデルの二つ目。ポインターとlongを64ビット化したもの。

64ビット版のLinux、FreeBSD/OpenBSD等BSD、その他一般にUNIXと解釈されているOS全般で採用されたデータ型モデル。

intとlongの長さが違うため、漠然と同じであることを想定したようなプログラムで問題が生じる恐れがある。

long と pointer が64bit。

LP64のデータ型一覧

整数型

説明 bit byte max min
short int 符号付整数 16bit 2byte 32767 -32768
int 符号付整数 32bit 4byte 2147483647 -2147483648
long int 符号付整数 64bit 8byte 9223372036854775807 -9223372036854775808
long long int 符号付整数 64bit 8byte 9223372036854775807 -9223372036854775808
char 文字(1文字) 8bit 1byte 127 -128
unsigned short int 符号なし整数 16bit 2byte 65535 0
unsigned int 符号なし整数 32bit 4byte 4294967295 0
unsigned long int 符号なし整数 64bit 8byte 18446744073709551615 0
unsigned long long int 符号なし整数 64bit 8byte 18446744073709551615 0
unsigned char 符号なしで文字 8bit 1byte 255 0

※ C言語の内部では文字は整数として扱っているためunsigned char型も存在する。
charは文字型のため、unsigned charの値幅がデフォルトになっているシステムもある。
Compiler User Guide: Basic data types in ARM C and C++

浮動小数点型

説明 bit byte max min
float 単精度実数 32bit 4byte 3.402823 * (10の38乗) (表現可能な最小の正の実数)1.175494 * (10の-38乗)
(表現可能な最小の実数)-3.402823 * (10の38乗)
double 倍精度実数 64bit 8byte 1.797693 * (10の308乗) (表現可能な最小の正の実数)2.225074 * (10の-308乗)
(表現可能な最小の実数)-1.797693 * (10の308乗)

stdint.hを使用して型を制御する

環境によって上限が変わってしまう型を使うのは危険なので、
stdint.hをインクルードして使っていくのが適切かと思いました。

標準ライブラリヘッダ - cppreference.com

参考

データ型モデル ‐ 通信用語の基礎知識

基本型 - cppreference.com

stdint.h

keitean
初心者です。毎日勉強! @42tokyo
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away