Solaris 動的トレースガイド

型変換

式に含まれる複数のオペランドの型が違っていても、相互に互換性のある型であれば、型変換が実行されて、結果の式の型が決まります。D の型変換の規則は、ANSI-C の整数の算術変換規則と同じです。この規則を、「通常の算術変換」と呼びます。

変換規則について簡単に説明します。 整数型はそれぞれ char、short、int、long、long long の順に順位付けられます。符号なし型は、対応する符号付き型より上位 (ただし 1 つ上位の整数型より下位) に順位付けられます。2 つの整数オペランドを使って x + y のような式を作成したとしましょう。この 2 つのオペランドの型が異なる場合、順位が高いほうの型が、式の結果の型になります。

変換が必要な状況では、順位が低いほうの型が、順位の高いほうの型に「拡張」されます。型が拡張されても、オペランドの値が変更されるわけではありません。 値は、その符号に従って、より大きいコンテナに拡張されるだけです。符号なしオペランドの拡張では、結果の整数の未使用の上位ビットにゼロが格納されます。符号付きオペランドの拡張では、未使用の上位ビットに符号拡張の実行結果が格納されます。符号付きの型を符号なしの型に変換した場合、最初に符号付きの型が拡張され、その後、変換によって求められた、新しい符号なしの型が割り当てられます。

整数などの型は、明示的に別の型に「キャスト」することもできます。D のポインタと整数は、任意の整数型またはポインタ型にキャストできます。ただし、これ以外の型にキャストすることはできません。文字列や文字配列のキャストと拡張の規則については、第 6 章文字列で説明します。整数またはポインタをキャストするときは、次のような式を使用します。

y = (int)x;

丸括弧の中に最終的な型を指定し、元となる式の前に付加します。整数をより上位の型にキャストするときは、拡張が行われます。整数をより下位の型にキャストするときは、不要な上位ビットにゼロが格納されます。

D では、浮動小数点算術演算は実行できません。そのため、浮動小数点オペランドの変換やキャストは許可されておらず、また、暗黙的な浮動小数点変換の規則も定義されていません。