D надає ряд основних типів, які завжди мають той же
розмір незалежно від платформи. Єдиним винятком
є тип real, який надає максимально можливу
точність для чисел з плаваючою точкою. Немає ніякої різниці
між розміром цілого числа незалежно від того, чи була програма
скомпільована для 32-бітової чи 64-бітової системи.
| Тип | Розмір |
|---|---|
bool | 8 біт |
byte, ubyte, char | 8 біт |
short, ushort, wchar | 16 біт |
int, uint, dchar | 32 біта |
long, ulong | 64 біта |
float | 32 біта |
double | 64 біта |
real | залежно вiд платформи, 80 бiт на Intel x86-32 |
| Тип | Розмір |
|---|---|
float | 32 біта |
double | 64 біта |
real | >= 64 біта (зазвичай 64 біта, але 80 біт на Intel x86-32) |
Префікс u позначає беззнаковi (unsigned) типи. char є UTF-8
символом, wchar використовується в UTF-16 рядках і dchar в UTF-32 рядках.
Перетворення між змінними різних типів допускається компілятором лише
якщо немає втрати точностi. Хоча конверсія між плаваючими типами
(наприклад double у float) допускається.
Перетворення в інший тип може бути примусовим при використаннi виразу
cast(<ТИП>) <змінна>. Перетворення необхідно використовувати з великою
обережністю, оскiльки виразу cast дозволено порушувати систему типів.
Спеціальне ключове слово auto створює змінну і виводить її
тип з правої частини виразу. Наприклад, auto MyVar = 7 виведе тип
int для myVar. Зверніть увагу, що тип буде визначено під час
компіляції і він не може бути змінений пiзнiше - так само, як з
будь-якою іншою змінною з явно заданим типом.
Всі типи даних мають властивість .init - значення, яким вони
iнiціалізуються. Для всіх цілих чисел це "0", для типiв з плаваючою
точкою це NaN (not a number, Не число).
Цілі типи та типи з плаваючою точкою мають властивість .max, яка
повертає найбільше значення, яке вони можуть містити. Цілі типи
також мають властивість .min для найменшого значення, яке вони можуть
містити, у той час, як типи з плаваючою точкою мають властивість
.min_normal, яка визначається найменшим представимим нормованним
значенням, не рівне 0.
Типи з плаваючою точкою також мають властивість .NaN (NaN-значення),
.infinity (значення нескінченності), .dig (точнiсть у кількостi
десяткових цифр), .mant_dig (кількість бітів у мантисі) і багато інших.
Кожен тип також має властивість .stringof, яка повертає його назву
у вигляді рядка.
У D індекси мають зазвичай тип псевдоніма (Alias) size_t, так як це
є досить великий тип, щоб представляти зміщення в усій адресній
пам'яті - тобто uint для 32-розрядних і ulong для 64-розрядних
архітектур.
assert - це вираз, який перевіряє умови у режимі налагодження (Debug)
і завершує роботу з AssertionError, якщо умова не виконується.