D có các kiểu số cơ bản với kích cỡ bộ nhớ cần thiết độc lập với
hệ điều hành ứng dụng đang chạy, ngoại trừ kiểu số thực real
với dấu chấm động.
Cụ thể hơn, dù bạn đang chạy ứng dụng D trên máy 32 hay 64 bit, thì
mỗi biến của các kiểu sau vẫn chiếm cùng số bít trên bộ nhớ.
kiểu | cỡ |
---|---|
bool | 8-bit |
byte , ubyte , char | 8-bit |
short , ushort , wchar | 16-bit |
int , uint , dchar | 32-bit |
long , ulong | 64-bit |
kiểu | cỡ |
---|---|
float | 32-bit |
double | 64-bit |
real | >= 64-bit (thường là 64-bit, hoặc 80-bit trên Intel x86 32-bit) |
Kiểu bắt đầu bởi u
để chỉ kiểu không nhận giá trị âm (không dấu).
Kiểu char
thực sự được nhúng trong UTF-8, trong khi wchar
dùng ký tự UTF-16, còn dchar
là UTF-32.
Việc chuyển đổi kiểu chỉ được phép khi không xảy ra sự thay đổi giá trị. Trong khi đó việc chuyển đổi giữa các kiểu số thực chấm động có thể diễn ra không có ràng buộc nào.
Việc chuyển đổi có thể mang tính cưỡng chép bằng chỉ thị
cast(KIỂU) tên_biến
. Việc này cần phải làm hết sức cẩn thận.
Từ khóa auto
để khai báo biến và nội suy kiểu của nó từ biểu thức
bên phải. Ví dụ, auto myVar = 7
sẽ xác định kiểu int
cho biến myVar
.
Việc nội suy này được thực hiện lúc biên dịch, và sau đó kết quả không thể
thay đổi.
(... hay là thuộc tính của kiểu.)
Các kiểu số cũng là đối tượng với các thuộc tính riêng, ví dụ
int.init
xác định giá trị khởi đầu mặc định cho mỗi biến số kiểu int
.
Với các kiểu số nguyên, giá trị này là 0
; với kiểu số chấm động, đó là nan
.
Giá trị kiểu.max
và kiểu.min
xác định giới hạn trên, dưới hay là khoảng
các giá trị mà kiểu
có thể biểu diễn. Ví dụ,
int.max # 2147483647
int.min # -2147483648
Với kiểu số chấm động, kiểu.min_normal
là giá trị nhỏ nhất khác 0
biểu diễn được trong kiểu, còn .nan
chỉ giá trị không xác định,
.infinity
chỉ vô cùng, .dig
chỉ số chữ số sau dấu phấy thập phân,
.mant_dig
là số bit trong phần Mantissa, v.v...
Chỉ thị kiểu.stringof
là chuỗi ký tự biểu diễn tên của kiểu.
Để đánh số thứ tự, ví dụ cho các phần tử trong một mảng, ta có thể dùng
kiểu size_t
, mà giới hạn của nó đủ lớn để đánh dấu tất cả các địa chỉ
trên bộ nhớ. Kiểu size_t
thực ra là tên khác của kiểu uint
trên máy
32 bit, hay của ulong
trên máy 64 bit.
Khi chương trình chạy ở chế độ dò lỗi (debug
), biểu thức assert
kiểm tra
một số điều kiện nào đó, và khi chúng bị vi phạm, biểu thức sẽ chặn không
cho chương trình chạy tiếp, và trả về lỗi AssertionError
.
Chặn assert(0)
đảm bảo toàn bộ đoạn mã sau đó không bao giờ được thi hành.