Kiểu dữ liệu thường được dùng trong các công cụ lập trình có thể được phân chia thành: Kiểu dữ liệu số - lưu trữ giá trị số.
Kiểu dữ liệu ký tự - lưu trữ thông tin mô tả.
Những kiểu dữ liệu này có thể có tên khác nhau trong các ngôn ngữ lập trình khác nhau. Ví dụ, một kiểu dữ liệu số được gọi trong C là int trong khi đó với Pascal được gọi là integer. Tương tự, một kiểu dữ liệu ký tự được đặt tên là char[ ] trong C trong khi đó trong Visual Basic nó được đặt tên là string. Trong bất cứ trường hợp nào, các dữ liệu được lưu trữ luôn giống nhau. Ðiểm khác duy nhất là các biến được dùng trong một công cụ phải được khai báo theo tên của kiểu dữ liệu được hỗ trợ bởi chính công cụ đó.
1.6.1 Những kiểu dữ liệu cơ sở
C có 5 kiểu dữ liệu cơ bản là int, float, double, character và void. Tất cả những kiểu dữ liệu khác dựa vào một trong số những kiểu này.
Kiểu dữ liệu int
Là kiểu dữ liệu lưu trữ dữ liệu số nguyên và là một trong những kiểu dữ liệu cơ bản trong bất cứ ngôn ngữ lập trình nào. Nó bao gồm một chuỗi của một hay nhiều
con số.
Trong C, để lưu trữ một giá trị số nguyên trong một biến tên là num1, ta khai báo như sau: int num1;
12
Kích thước của kiểu dữ liệu int được xác định tùy thuộc vào hệ điều hành. Cụ thể, với hệ điều hành 16 bit (MS-DOS), mỗi biến được khái báo kiểu int sẽ được cấp phát 16 bit (2 byte) bộ nhớ, cho phép lưu trữ các số nguyên trong phạm vi -32768 tới 32767. Với hệ điều hành 32 bit (Windows 9x/2000/NT/XP), kiểu dữ liệu này có kích thước 4 byte, cho phép lưu trữ các số nguyên trong phạm vi -2147483648 tới 2147483647.
Kiểu dữ liệu float
Một biến có kiểu dữ liệu số thực được dùng để lưu trữ các giá trị chứa phần
thập phân.
Trình biên dịch phân biệt các kiểu dữ liệu float và int. Ðiểm khác nhau chính
của chúng là
kiểu dữ liệu int chỉ bao gồm các số nguyên, trong khi kiểu dữ liệu float có thể lưu
giữ thêm cả
các phân số.
Trong C, để lưu trữ một giá trị float trong một biến tên gọi là num2, việc khai báo như sau: float num2;
Biến đã khai báo là kiểu dữ liệu float có thể lưu giá trị thập phân có độ chính xác tới 6 con số. Biến này được cấp phát 32 bit (4 byte) của bộ nhớ.
Kiểu dữ liệu double
Kiểu dữ liệu double được dùng khi giá trị được lưu trữ vượt quá giới hạn về dung lượng của kiểu dữ liệu float. Biến có kiểu dữ liệu là double có thể lưu trữ nhiều hơn khoảng hai lần số các chữ số của kiểu float. Số các chữ số chính xác mà kiểu dữ liệu float hoặcdouble có thể lưu trữ tùy thuộc vào hệ điều hành cụ thể của máy tính.
Các con số được lưu trữ trong kiểu dữ liệu float haydouble được xem như
nhau trong hệ
thống tính toán. Tuy nhiên, sử dụng kiểu dữ liệu float tiết kiệm bộ nhớ một nửa so
với kiểu dữ
liệu double.
Trong C, để lưu trữ một giá trị double trong một biến có tên là num3, sẽ
được khai báo
như sau :
float num3;
Kiểu dữ liệu double cho phép độ chính xác cao hơn (tới 10 con số). Một biến khai báo kiểu dữ liệu double chiếm 64 bit (8 byte) trong bộ nhớ.
Kiểu dữ liệu char
Kiểu dữ liệu char chiếm 1 byte bộ nhớ và được dùng để lưu trữ một ký tự đơn.
Một kiểu dữ liệu char có thể lưu một ký tự đơn được bao đóng trong hai dấu nháy đơn (‘’). Ví dụ kiểu dữ liệu char như: ‘a’, ‘m’, ‘$’ ‘%’.
Có thể lưu trữ những chữ số như những ký tự bằng cách bao chúng bên trong cặp dấu nháy đơn. Không nên nhầm lẫn chúng với những giá trị số. Ví dụ, ‘1’,
‘5’ và ‘9’ sẽ không được nhầm lẫn với những số 1, 5 và 9.
Kiểu dữ liệu void
C có một kiểu dữ liệu đặc biệt gọi là void. Kiểu dữ liệu này chỉ cho trình biên dịch C biết rằng không có dữ liệu của bất cứ kiểu nào. Trong C, các hàm số thường trả về dữ liệu thuộc một kiểu nào đó. Tuy nhiên, khi một hàm không có
gì để trả về, kiểu dữ liệu void được sử dụng để chỉ ra điều này.
Dung lượng nhớ và phạm vi giá trị của những kiểu này thay đổi theo mỗi loại bộ xử lý và việc cài đặt các trình biên dịch C khác nhau.
13
1.6.2 Những kiểu dữ liệu dẫn xuất
Các kiểu dữ liệu cơ bản (char, int, float và double) mà chúng ta đã thảo luận ở trên được sử dụng cho việc trình bày dữ liệu thực sự trong bộ nhớ của máy tính.
Những kiểu dữ liệu này có thể được sửa đổi sao cho phù hợp với những tình huống khác nhau một cách chính xác. Kết quả, chúng ta có được các kiểu dữ liệu dẫn xuất từ những kiểu cơ bản này.
Một bổ từ (modifier) được sử dụng để thay đổi kiểu dữ liệu cơ bản nhằm phù hợp với các tình huống đa dạng. Ngoại trừ kiểu void, tất cả các kiểu dữ liệu khác có thể cho phép những bổ từ đứng trước chúng. Bổ từ được sử dụng với C là signed, unsigned, long và short. Tất cả chúng có thể được áp dụng cho dữ liệu kiểu ký tự và kiểu số nguyên. Bổ từ long cũng có thể được áp dụng cho double.Ðể khai báo một biến kiểu dẫn xuất, chúng ta cần đặt trước khai báo biến thông thường một trong những từ khóa của bổ từ.
Các kiểu có dấu (signed) và không dấu(unsigned)
Khi khai báo một số nguyên, mặc định đó là một số nguyên có dấu. Tính quan
trọng nhất
của việc dùng signed là để bổ sung cho kiểu dữ liệu char, vì char là kiểu không
dấu theo mặc
định.
Kiểu unsigned chỉ rõ rằng một biến chỉ có thể có giá trị dương. Bổ từ này có
thể được sử
dụng với kiểu dữ liệu int và kiểu dữ liệu float. Kiểu unsigned có thể áp dụng cho
kiểu dữ liệu
float trong vài trường hợp nhưng điều này giảm bớt tính khả chuyển (portability) của mã lệnh.
Với việc thêm từ unsigned vào trước kiểu dữ liệu int, miền giá trị cho những số dương có thể được tăng lên gấp đôi. Chẳng hạn, với lệnh khai báo và gán giá trị cho biến như sau:
unsigned int x = 35650;
Không gian cấp phát cho kiểu biến này vẫn giữ nguyên. Nghĩa là, biến x được cấp phát 2 byte như khi nó dùng kiểu int. Tuy nhiên, những giá trị mà một kiểu unsgned int hỗ trợ sẽ nằm trong khoảng từ 0 đến 65535, thay vì là -32768 tới 32767 mà kiểu int hỗ trợ. Theo mặc định, int là một kiểu dữ liệu có dấu.
Các kiểu long và short
Chúng được sử dụng khi một số nguyên có chiều dài ngắn hơn hoặc dài hơn chiều dài bình thường. Một bổ từ short được áp dụng cho kiểu dữ liệu khi chiều dài yêu cầu ngắn hơn chiều dài số nguyên bình thường và một bổ từ long được dùng khi chiều dài yêu cầu dài hơn chiều dài số nguyên bình thường.
Bổ từ short được sử dụng với kiểu dữ liệu int. Nó sửa đổi kiểu dữ liệu int theo hướng chiếm ít vị trí bộ nhớ hơn. Bởi vậy, trong khi một biến kiểu int chiếm giữ 16 bit (2 byte) thì một biến kiểu short int (hoặc chỉ là short), chiếm giữ 8 bit (1 byte) và cho phép những số có trong phạm vi từ -128 tới 127.
Bổ từ long được sử dụng tương ứng một miền giá trị rộng hơn. Nó có thể được sử dụng với int cũng như với kiểu dữ liệu double. Khi được sử dụng với kiểu dữ liệu int, biến chấp nhận những giá trị số trong khoảng từ -2,147,483,648 đến 2,147,483,647 và chiếm giữ 32 bit (4 byte). Tương tự, kiểu long double của một biến chiếm giữ 128 bit (16 byte).
Một biến long int được khai báo như sau:
long int num;
Nó cũng có thể được khai báo đơn giản như long num. Một số long integer có thể được khai báo như long int hay chỉ là long. Tương tự, ta có short int hay short.
Bảng 1.2trình bày phạm vi giá trị cho các kiểu dữ liệu khác nhau và số bit nó chiếm giữ dựa theo tiêu chuẩn ANSI.
14
Kiểu Dung lượng xấp xỉ
(đơn vị là bit)
Phạm vi
char 8 -128 tới 127
unsigned 8 0 tới 255
signed char 8 -128 tới 127
int 16 -32,768 tới 32,767
unsigned int 16 0 tới 65,535
signed int 16 Giống như kiểu int
short int 16 -128 tới 127
unsigned short int 16 0 tới 65, 535
signed short int 16 Giống như kiểu short int
long int 32 -2,147,483,648 tới 2,147,483,647
signed long int 32 Giống như kiểu long int
unsigned long int 32 0 tới 4,294,967,295
float 32 6 con số thập phân
double 64 10 con số thập phân
long double 128 10 con số thập phân
Bảng 1.2: Các kiểu dữ liệu và phạm vi.
Chương trình sau đây trình bày cách khai báo những kiểu dữ liệu trên.
Ví dụ 1. 1:
#include
<stdio.h
>main() {
char c; /* c là biến kiểu char */
int x; /* x là biến kieur
nguyên */
float y;/* y là biến kiểu float */
double z; /* z là biến kiểu double */
long l; /* l là biến kiểu long int */
short t;/* t là biến kiểu short
integer */
}