Pascal 日和 ホームページ

更新:2024-11-04


Object Pascal 入門



3. 定義済み順序型 − 整数型・論理型・文字型




 単純型のうち、実数型以外はすべて順序型になります。

 順序型には、整数型、論理型、文字型、列挙型、部分範囲型があります。
 その中で、整数型、論理型、文字型 が、すぐに使用できる定義済みの順序型になります。ここでは定義済みの順序型について説明します。



順序型の共通事項


 順序型は、順序を持つ値の有限集合を表します。整数型の順序数はその整数値自身となり、整数型以外の順序数は、基本的に 0, 1, 2, ・・・ となります。

 順序数は最小値と最大値をもちます。最小値以外は先行値(1つ前の値)をもち、最大値以外は後続値(1つ後の値)をもちます。


 順序型はその順序数に従って、大小関係、等値関係があり、関係演算子( =, <>, <, >, <=, >= )が利用できます。



関係演算(X, Yは同じ順序型の値) 真となる条件

X = Y X と Y の順序数が等しいときに真となる

X <> Y X と Y の順序数が等しくないときに真となる

X < Y X の順序数が Y の順序数より小さいときに真となる

X > Y X の順序数が Y の順序数より大きいときに真となる

X <= Y X の順序数が Y の順序数以下のときに真となる

X >= Y X の順序数が Y の順序数以上ときに真となる


 以下の定義済み関数があります。



関数 (Xは順序型の値) 戻り値

Succ(X) X の後続値

Pred(X) X の先行値

Ord(X) X の順序数



関数 (Tは順序型名) 戻り値

High(T) 順序型 T の最大値

Low(T) 順序型 T の最小値




整数型


 整数型は、整数の部分集合を表します。


■整数型の範囲とサイズ


値の範囲 (下限 .. 上限) サイズ 別名

Byte 0 .. 255 符号なし 1 バイト UInt8

ShortInt -128 .. 127 符号付き 1 バイト Int8

SmallInt -32768 .. 32767 符号付き 2 バイト Int16

Word 0 .. 65535 符号なし 2 バイト UInt16

Integer LongInt と同じ *1) 符号付き 4 バイト *1) Int32

Cardinal LongWord と同じ 符号なし 4 バイト UInt32

LongInt -2147483648 .. 2147483647 符号付き 4 バイト Int32

LongWord 0 .. 4294967295 符号なし 4 バイト UInt32

Int64 -9223372036854775808 .. 9223372036854775807 符号付き 8 バイト Int64

QWord 0 .. 18446744073709551615 符号なし 8 バイト UInt64

 *1) 標準では IntegerSmallInt と同じですが、OBJFPC モードでは IntegerLongInt と同じになります。


 整数の定数は値に基づいて型を決定します。次の表の値の範囲を上から確認し、その範囲に含まれているときにその型を適用します。

 ただし、型を指定した定数はその限りではありません。


■整数型の型としての大きさ(小さい順)


整数値の範囲 (下限 .. 上限) 適用する型 サイズ

-128 .. 127 ShortInt 符号付き 1 バイト

0 .. 255 Byte 符号なし 1 バイト

-32768 .. 32767 SmallInt 符号付き 2 バイト

0 .. 65535 Word 符号なし 2 バイト

-2147483648 .. 2147483647 LongInt 符号付き 4 バイト

0 .. 4294967295 LongWord 符号なし 4 バイト

-9223372036854775808 .. 9223372036854775807 Int64 符号付き 8 バイト

0 .. 18446744073709551615 QWord 符号なし 8 バイト


 プラットフォーム(32bit, 64bit)ごとにネイティブな整数のサイズが決まっています。

 32bitプラットフォームとしてコンパイルされたプログラムのネイティブ整数は32bit(4バイト)ににります。

 64bitプラットフォームとしてコンパイルされたプログラムのネイティブ整数は64bit(8バイト)ににります。

 注) Integer型はネイティブ整数型ではありません。プラットフォーム依存ではなく、Free Pascal のモード依存です。


 整数の2項演算(+, - など)では、ネイティブ整数サイズより小さい整数は、すべて符号付きのネイティブ整数に昇格(変換)します。

 1つでもネイティブ整数より大きい型(上記の表の上から下に向かって大きな型になる)が含まれる場合、それらを包含する型にすべて昇格します。

 つまり、64bitプラットフォームでは、演算時にすべて64bit(8バイト)整数に昇格されることになります。また、それ以上への昇格はできません。




論理型


 論理型は、真・偽を表す値を持ちます。

 論理型の値には定義済みの定数 TrueFalse があります。True は真、False は偽をあらわします。

 大小関係は、False < True となります。


■論理型のサイズと False, True の順序数


サイズ Ord(False) Ord(True)

Boolean 1 バイト 0 1

Boolean8 1 バイト 0 1

Boolean16 2 バイト 0 1

Boolean32 4 バイト 0 1

Boolean64 8 バイト 0 1

ByteBool 1 バイト 0 0以外の任意の値

WordBool 2 バイト 0 0以外の任意の値

LongBool 4 バイト 0 0以外の任意の値

QWordBool 8 バイト 0 0以外の任意の値


 基本的な論理型は Boolean です。C言語などとインターフェイスを取るためにサイズの指定が必要な場合で、真・偽 を 1 と 0 として扱うときに Boolean8,Boolean16, Boolean32, Boolean64 を使用することができます。

 C言語とのインターフェイスをさらに容易にするために、ByteBool, WordBool, LongBool, QWOrdBool を使用することができます。これらは、偽を 0 とし、真を 0 以外の任意の値とします。これらに True を代入するときは not 0 (-1)になります。Boolean に変換するときは、0 以外の値はすべて True に変換されます。




文字型


 文字列は文字コードで順序付けられます。1バイトの文字型と2バイトの文字型の2つあります。


■文字型のサイズ


サイズ 内容

AnsiChar 1 バイト 1つのASCII文字

WideChar 2 バイト 1つのUTF-16のユニコード文字

Char AnsiChar と同じ *1)

 *1) 将来的には CharWideChar または AnsiChar の別名になる可能性があります。Free Pascal 3.2.2 では AnsiChar です。


 ユニコード文字も整数値の文字コードの前に # 記号を付けてユニコード文字値を表すことができます。

 '花'#$82B1#33457 は同じ値のユニコード文字です。


 UTF-8で書いたソースコード上では、'花' は3バイトのUTF-8のコードですが、コンパイルしたプログラムの中ではUTF-16のコードに変換されます。

 この変換が正しく行えるように、{$CODEPAGE UTF8} のディレクティブが必要なわけです。


 その他に、UCS2Char、UCS4Char、UniCodeChar がありますが、これらは Delphi との互換性のためだけに用意されています。型としては WideChar と同じになります。