第13章 データ型の修飾

データ型については第2章で説明しましたが、この章では、データ型の修飾について説明します。


13−1.変数のサイズ修飾

既に学習した「long」はサイズを修飾するものです。 実は「long」は「long int」を略した記述で、その意味は「int型と同じかそれより大きい」となります。

同様に「int型と同じかそれより小さい」を表す「short」(short int の略)も存在します。

ANSI C では short と long のバイト幅は処理系に任されており、以下のようにのみ規定しています。

(整数型)

short int ≦ int ≦ long int

short int は short と記述可能

long int は long と記述可能

(浮動小数点型)

float ≦ double ≦ long double

バイト幅は処理系により異なり、共通サイズのデータ型は 1バイト幅の「char型」だけです。

特に「int型」は「対象となっているマシン環境で、最も効率よく処理できる整数幅を int型に割り当てる」とことになっており、処理系によって異なります。

このホームページでは、MS-DOS系のC言語で用いられている「int幅 = 2バイト」を採用しています。その他の処理系のC言語を利用している人は、自分の環境に合わせて読みかえるようにしてください。また、データサイズがわからない場合には「sizeof演算子」を使うなどして確認するようにしてください。


13−2.変数の符号修飾

short や int などの整数型の変数は、符号修飾をすることができます。

単に「short」や「int」としたときは

「符号つき…負の値も扱える」

です。

これは、「符号つき…負の値も扱える」という修飾 「signed」を付けて、「signed short」や「signed int」とすべきところを「signed」を省略して単に「short」や「int」とした場合です。

これに対し、「unsigned」をつけて「unsigned short」や「unsigned int」とした場合には

符号なし…正の値のみを扱う

となります。

「unsigned」を用いると、符号ビットを数値として使うため、扱える数値の範囲が倍になります。 このため、unsigned は「負数は必要ない。その代わり正数をもっと表現したい。」という場合に用います。

※ 単にcharとした場合、符号つきか符号なしかは処理系に任されます。

13−3.宣言の順番

変数の宣言は基本的には、

記憶クラス 型修飾子(符号修飾子、サイズ修飾子) データ型 変数名;

という順番で行います。このとき、緑色部分は省略ができます。

【整数型の場合】
記憶クラス符号修飾子サイズ修飾子基本型指定
auto
static
signed
unsigned
short
long
int
(注) 記憶クラスの「auto」と「static」については「第12章 記憶クラス」を参照してください。
また、記憶クラスの「register」と「extern」はこのホームページでは扱いません。
【浮動小数点型の場合】
記憶クラスサイズ修飾子基本型指定
auto
static
float
long double

13−4.定数の修飾

2-1. 定数」で定数の表記方法について扱いましたが、実は定数も接尾語を付加することにより、サイズ修飾と符号修飾が行えるのです。

ここでは、定数のサイズ修飾と符号修飾についてまとめます。

(1)整数定数の修飾

整数定数は、接尾語の u または U を 付けると「unsigned型」に、接尾語の l または L を付けると「long型」になります。

記述例符号意味意味規則(注1)
接尾語無し46ありint型 10進定数int => long =>
unsigned long
056int型 8進定数int => unsigned =>
long => unsigned long
0x2e
0X2e
int型 16進定数
u/U接尾語付き0141520u
0141520U
なしunsigned型 8進定数unsigned =>
unsigned long
50000u
50000U
unsigned型 10進定数
0xC350u
0xC350U
unsigned型 16進定数
l/L接尾語付き
(注2)
0141520Lありlong型 8進定数long =>
unsigned long
50000Llong型 10進定数
0xC350Llong型 16進定数
l/L u/U接尾語付き
(注3)
0303240UL
0303240LU
なしunsigned long型 8進定数unsigned long
100000UL
100000LU
unsigned long型 10進定数
0x186A0UL
0x186A0LU
unsigned long型 16進定数
(注1) 整数定数は値の大きさによって、サイズと符号の扱いが変わります。
例えば、int型 2バイトの処理系ですと接尾語無し定数は、

	10		: intで扱う
	50000		: longで扱う
	3000000000	: unsigned longで扱う
	
というように、値の大きさによって、扱われる型が変化していきます。
(注2) 接尾語「l」も使えますが、「1」と間違えないように「L」を使いましょう。
(注3) L と U の順序はどちらが先でもかまいません。

(2)浮動小数点定数の修飾

浮動小数点定数は、接尾語の f または F を 付けると「float型」に、接尾語の l または L を付けると「long double型」になります。

記述例意味
接尾語無し30.0, .5, 1.double型
30.0e3, 30.0e+3, 30.0E3,
30.0E+3, 30.0e-3, 30.0E-3
double型(30.0×103
double型(30.0×10-3
f/F接尾語付き30.0F, .5F, 1.F,
30.0e-3F, 30.0E-3F
float型
l/L接尾語付き
(注1)
30.0L, .5L, 1.L,
30.0e-3L, 30.0E-3L
long double型
(注1) 接尾語「l」も使えますが、「1」と間違えないように「L」を使いましょう。

【limits.h】

C言語の処理系は、1バイトのビット数や汎整数型の最大値と最小値などをlimits.h ヘッダにマクロ(#define)で定義しています。

limits.h ヘッダ中のマクロ

【float.h】

C言語の処理系は、浮動小数点型の最大値と最小値などをfloat.h ヘッダにマクロで定義しています。

float.h ヘッダ中のマクロ

◆◆前ページ  ▲TOP▲  次ページ◆◆

banner
「初心者のためのポイント学習C言語」
Copyright(c) 2000-2004 TOMOJI All Rights Reserved