D erbjuder ett antal grundläggande typer som alltid har samma
storlek oavsett vilken plattform. Det enda undantaget
är typen real
som erbjuder den högsta möjliga precision för
flyttal. Det finns inga skillnader för heltals storlekarna oavsett
om programmet är kompilerat för ett 32-bitar eller ett 64-bitars system.
typ | storlek |
---|---|
byte | 8-bit |
bool , ubyte , char | 8-bit |
short , ushort , wchar | 16-bit |
int , uint , dchar | 32-bit |
long , ulong | 64-bit |
typ | storlek |
---|---|
float | 32-bit |
double | 64-bit |
real | >= 64-bit (generellt 64-bit, men 80-bit på Intel x86 32-bit) |
Prefixet u
betecknar en osignerad typ. char
översätter till
ett UTF-8 tecken, wchar
används i UTF-16 strängar och dchar
i UTF-32 strängar.
En omvandling mellan variabler av olika typer är endast
tillåtet av kompilatorn om ingen precision går förlorad.
En konvertering mellan flyttalstyper (T.ex. double
till float
)
är dock tillåtet.
En omvandling till en annan typ kan framtvingas genom att
använda cast(TYP) minVar
uttrycket. Det måste dock användas
med stor försiktighet eftersom cast
uttrycket tillåts bryta typsystemet.
Det speciella nyckelordet auto
skapar en variabel och antyder dess typ
från höger sida av uttrycket. auto minVar = 7
kommer att härleda typen
int
för minVar
. Notera att typen fortfarande är satt vid kompilering och
kan inte ändras, precis som med andra variabler med en uttryckligen
angiven typ.
Alla datatyper har en egenskap .init
som de initialiseras till. För alla
heltal är detta 0
och för flyttal är det nan
(not a number, "Inte ett tal").
Heltalstyper och flyttalstyper har en .max
egenskap för det högsta värdet
de kan representera. Heltalstyperna har också en .min
egenskap för det
lägsta värdet de kan representera medan flyttalstyper har en .min_normal
egenskap som defineras till det minsta representativa normaliserade värdet
som inte är 0.
Flyttalstyper har också en egenskaperna .nan
(NaN-värde), .infinity
(oändlighetens värde), .dig
(antal decimaler i precisionen), .mant_dig
(antalet bitar i mantissa) och mer.
Varje typ har också en .stringof
egenskap som ger sitt namn som en
sträng.
I D har index oftast alias typen size_t
, eftersom det är en typ som är
tillräckligt stor för att representera en förskjutning i alla adresserbara
minnen, uint
för 32-bitars och ulong
för 64-bitarsarkitekturer.
NOTERA: Följande länkar är på engelska