コンピュータサイエンスでは、プリミティブデータ型は、他のすべてのデータ型が構築される基本データ型の集合です。 [ 1 ]具体的には、特定のプロセッサで使用される限られたデータ表現の集合を指すことが多く、コンパイルされたすべてのプログラムはこれを使用する必要があります。ほとんどのプロセッサは同様のプリミティブデータ型の集合をサポートしていますが、具体的な表現は異なります。[ 2 ]より一般的には、プリミティブデータ型は、プログラミング言語に組み込まれた標準データ型(組み込み型)を指す場合があります。[ 3 ] [ 4 ]プリミティブではないデータ型は、派生型または複合型と呼ばれます。[ 3 ]
最も一般的なプリミティブ型は、コンピュータハードウェアで使用されサポートされているもので、さまざまなサイズの整数、浮動小数点数、ブール論理値などです。このような型に対する演算は通常非常に効率的です。プロセッサ固有のプリミティブデータ型は、コンピュータのメモリ内のオブジェクトと1対1で対応しており、これらの型に対する演算はほとんどの場合、可能な限り最速です。[ 6 ]例えば、整数の加算は単一のマシン命令として実行でき、文字シーケンスを単一の命令で処理するための特定の命令を提供するものもあります。[ 7 ]しかし、プリミティブデータ型の選択はパフォーマンスに影響を与える可能性があり、例えば、浮動小数点数の配列を操作するにはSIMD演算とデータ型を使用する方が高速です。[ 6 ] : 113
整数データ型は、数学的な整数の範囲を表します。整数は、符号付き(負の値を許容)または符号なし(負でない整数のみ)のいずれかです。一般的な範囲は次のとおりです。
浮動小数点数は、小数部を持つ可能性のある限定精度の有理数を表します。これらの数値は、通常はバイナリ形式ですが、場合によっては10進数形式である科学的記数法と同等の形式で内部的に格納されます。浮動小数点数は限定精度であるため、実数または有理数のサブセットのみを正確に表現でき、その他の数値は近似的にしか表現できません。多くのプログラミング言語には、単精度(floatと呼ばれることが多い)と倍精度(doubleと呼ばれることが多い)の両方の型があります。
ブール型(通常はboolまたはbooleanと表記される)は、真または偽のいずれかの値をとる論理型です。真と偽の値セットを格納するには1ビットしか必要ありませんが、プログラミング言語では通常、ブール型は1バイト以上で実装されます。
多くの言語(Java、Pascal、Adaなど)は、ブール値を独立した論理型として概念に従って実装しています。ただし、一部の言語では、ブール値やブール式に拡張された意味を持たせるため、または以前のバージョンの言語との後方互換性を実現するために、ブール値を暗黙的に数値型に変換する場合があります。たとえば、ANSI Cとその以前の標準に準拠した初期のバージョンのCプログラミング言語には、専用のブール型はありませんでした。代わりに、数値のゼロはfalseとして解釈され、その他の値はすべてtrueとして解釈されます。[ 9 ]新しいC99では、独立したブール型が追加され_Bool(後にC23でboolキーワードととともにtrueに移動されました)、[ 10 ] C++では、組み込み型として、予約語としてtrueとfalseがサポートされています。[ 11 ]falsebool
CとC++には、少なくとも 4 つの型char、、、、およびがありますが、修飾子int、、、およびにより、C にはターゲット依存の多数の整数および浮動小数点プリミティブ型が含まれています。[ 12 ] C99 では、修飾子を(例: )と組み合わせて 2 回使用することが許可されました。[ 13 ]同様に、およびは、整数型の修飾子として使用できます。C23では、型がコアデータ型として導入されましたが、これは常に C++ のコアデータ型でした。C++ には、(Java に似た) 型もあります。floatdoubleshortlongsignedunsignedlongintlong long intsignedunsignedboolstd::byte
C と C++ には、配列やコレクションのインデックス付けなどに使用するsize_t、 、intptr_tおよびその他の整数型も含まれています。これらは独立したデータ型ではなく、多くの場合 のエイリアスであり、システム定義です。これらは、Rustusizeやに似ているかもしれませんisize。
Java の基本型は C のそれと似ています。Java仮想マシンのプリミティブデータ型のセットは次のようになります。[ 14 ]
XMLスキーマ定義言語は、19個の基本データ型を提供します。[ 17 ]
string:文字列、 Unicodeコードポイントのシーケンスboolean:ブール値decimal: 10進数表記で表される数値floatおよびdouble:浮動小数点数duration、、、、、、、、および:カレンダーの日付と時刻dateTimetimedategYearMonthgYeargMonthDaygDaygMonthhexBinaryおよびbase64Binary:16進数またはBase64でエンコードされたバイナリデータanyURI: URIQName:修飾名NOTATION: スキーマで表記として宣言された QName。表記は、非 XML データ型を埋め込むために使用されます。[ 18 ]この型は直接使用することはできません。限られた QName のセットを列挙する派生型のみを使用できます。JavaScriptには、string、number、bigint、boolean、symbol、undefined、nullの7つのプリミティブデータ型があります。[ 19 ]これらの値は不変とみなされます。これらはオブジェクトではなく、メソッドやプロパティもありません。ただし、undefinedとnullを除くすべてのプリミティブにはオブジェクトラッパーがあります。[ 20 ]
Visual Basic .NETでは、プリミティブデータ型は、4 つの整数型、2 つの浮動小数点型、16 バイトの 10 進数型、ブール型、日付/時刻型、Unicode 文字型、および Unicode 文字列型で構成されています。[ 21 ]
uRust には、それぞれまたはの形式で、固定幅の符号なし整数と符号付き整数のプリミティブ型があり、その後iに から までの 2 のべき乗の任意のビット幅が続き、、、 、、、、、、型が得られます。[ 22 ]また、 および型も利用可能で、これらは参照と同じビット幅の符号なし整数と符号付き整数であり、型は配列やインデックス可能なコレクション型へのインデックスに使用されます。[ 22 ]8128u8u16u32u64u128i8i16i32i64i128usizeisizeusize
Rustには以下の機能もあります。
boolブール型の場合。[ 22 ]f32f6432ビットおよび64ビット浮動小数点数の場合も同様です。[ 22 ]char for a unicode character. Under the hood these are unsigned 32-bit integers with values that correspond to the char's codepoint but only values that correspond to a valid unicode scalar value are valid.[22]Built-in types are distinguished from others by having specific support in the compiler or runtime, to the extent that it would not be possible to simply define them in a header file or standard library module.[23] Besides integers, floating-point numbers, and Booleans, other built-in types include:
nullptr_t in C++11 and C23Integer type in Common Lisp, Erlang, Haskell文字型は、すべてのUnicode 文字を表現できる型であり、少なくとも 21 ビット幅である必要があります。Julia などの一部の言語では、真の 32 ビット Unicode 文字型がプリミティブとして含まれています。[ 24 ] JavaScript、Python、Ruby、および多くのBASIC方言などの他の言語では、プリミティブ文字型はありませんが、代わりにプリミティブデータ型として文字列が追加され、通常はUTF-8エンコーディングが使用されます。長さが 1 の文字列は、通常、単一の文字を表すために使用されます。
一部の言語には、Unicode 文字をすべて表現するには小さすぎる文字char型があります。これらは、誤解を招く名前が付けられた整数型として分類するのがより適切です。たとえば、C には型が含まれていますが、これはメモリの最小アドレス指定可能単位として定義されており、いくつかの標準 ( POSIXなど) では 8ビットcharであることが要求されています。これらの標準の最近のバージョンでは、これを数値型と呼んでいます。Javaではchar16 ビット整数型にも使用されますが、これも Unicode 文字型ではありません。[ 25 ]
また、 「文字列」という用語は必ずしもUnicode文字のシーケンスを指すとは限らず、バイトのシーケンスを指す場合もあります。たとえば、x86-64には、1、2、4、または8バイトの長さの項目のシーケンスを移動、設定、検索、または比較するための文字列命令があります。 [ 26 ]
Integer operations are fast in most cases, [...]
{{cite book}}: CS1 maint: location missing publisher (link)