Lập trình C: Kiểu dữ liệu (Data type)

Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực

Mục lục bài viết:

I. Tổng quan

C phân chia các loại giá trị dữ liệu khác nhau thành các nhóm gọi là kiểu dữ liệu (data type).

Khi dữ liệu được lưu trữ trong các biến có kiểu dữ liệu khác nhau, nó yêu cầu dung lượng bộ nhớ sẽ khác nhau. Dung lượng bộ nhớ được chỉ định cho một biến tùy thuộc vào kiểu dữ liệu của nó. Ðể chỉ định bộ nhớ cho một đơn vị dữ liệu, chúng ta phải khai báo một biến với một kiểu dữ liệu cụ thể.

Khai báo một biến có nghĩa là một vùng nhớ nào đó đã được gán cho biến. Vùng bộ nhớ đó sau này sẽ được tham chiếu thông qua tên của biến. Dung lượng bộ nhớ được cấp cho biến bởi hệ điều hành phụ thuộc vào kiểu dữ liệu được lưu trữ trong biến. Vì vậy, một kiểu dữ liệu sẽ mô tả loại dữ liệu phù hợp với biến.

Dạng thức chung cho việc khai báo một biến:

Kiểu_dữ_liệu Tên_biến;

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 ngôn ngữ Cint, trong khi đó tại Visual Basic đượ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ụ đó.

II. Kiểu dữ liệu cơ bản

C có 5 kiểu dữ liệu cơ bản. Tất cả những kiểu dữ liệu khác đều dựa vào những kiểu này. Dưới đây sẽ trình bày các kiểu dữ liệu mà C hỗ trợ.

1. int

Là kiểu dữ liệu lưu trữ 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 dãy của một hay nhiều con số.

Thí dụ trong C, để lưu trữ một giá trị số nguyên trong một biến tên là 'num', ta khai báo như sau:

int num;

Biến num không thể lưu trữ bất cứ kiểu dữ liệu nào như "Long" hay 1.234 chẳng hạn. Kiểu dữ liệu số này cho phép các số nguyên trong phạm vi từ -32768 tới 32767 (tổng cộng 216 = 65536 giá trị) được lưu trữ. Hệ điều hành cấp phát 16 bit (2 byte) cho một biến đã được khai báo kiếu int. Ví dụ: 12322, 0, -232.

Nếu chúng ta gán giá trị 12322 cho num thì biến này là biến kiểu số nguyên và 12322 là hằng số nguyên.

Chú ý: Một biến kiểu int còn có thể lưu trữ một ký tự. Ví dụ như biến num có thể lưu trữ một ký tự bất kỳ nào đó, chẳng hạn num='A'. Bản chất là biến num sẽ lưu trữ vị trí tương ứng của ký tự đó trong bảng mã ASCII. Trong trường hợp này ký tự 'A' có vị trí là 65, tức là num đang lưu giá trị 65. Dưới đây là hình ảnh minh họa cho điều này.

C: một biến kiểu int cũng có thể lưu trữ một ký tự

2. float

Một biến có kiểu float được dùng để lưu trữ các giá trị số thực (dấu chấm động - bao gồm cả phần thập phân). Trình biên dịch sẽ phân biệt các kiểu dữ liệu float 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 số thập phân.

Ví dụ, trong C, để lưu trữ một giá trị float trong một biến tên gọi là 'flo', việc khai báo sẽ như sau:

float flo;

Biến flo đã 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) bộ nhớ. Ví dụ như 23.05, 56.5, 32 là những số mà biến num có thể lưu trữ.

Nếu chúng ta gán giá trị 23.5 cho flo, thì biến flo là biến số thực và 23.5 là một hằng số thực.

Miền giá trị mà một biến kiểu float có thể lưu trữ: từ -2.147.483.648 đến 2.147.483.647 (tổng cộng có 232 = 4.294.967.296 giá trị).

Lưu ý là trong C dùng dấu chấm (.) để phân cách giữa phần nguyên và phần thập phân.

3. 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ặc double 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 hay double đượ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.

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ớ.

Thí dụ trong C, để lưu trữ một giá trị double cho một biến tên 'dou', khai báo sẽ như sau:

double dou;

Nếu chúng ta gán giá trị 12.34567890 cho biến dou, thì nó là biến kiểu double và 12.34567890 là một hằng kiểu double.

4. char

Kiểu char là kiểu dữ liệu ký tự. Mỗi biến kiểu char sẽ lưu trữ một ký tự đơn bất kỳ. Mỗi ký tự phải được đặt trong cặp nháy đơn, ví dụ 'A', '$', '1', '#', '\n' (ký tự xuống dòng), ' ' (ký tự dấu cách), '\t' (ký tự tab), ... Mỗi biến kiểu char sẽ được cấp phát một vùng nhớ có kích thước 8 bit = 1 byte.

Không nên nhầm lẫn ký tự số với con số. Ví dụ như các ký tự '1', '4' và '7' sẽ không được nhầm lẫn với những số 1, 4 và 7.

Xem xét những câu lệnh của mã C dưới đây:

char chr;
chr='V';

Câu lệnh đầu tiên khai báo biến chr có kiểu dữ liệu char. Hàng thứ hai lưu giữ một giá trị khởi tạo cho nó là 'V'. Lúc này thì biến chr là một biến ký tự và 'V' là một hằng ký tự.

Chú ý: ta cũng có thể cho biến ký tự lưu một số nguyên là vị trí tương ứng của ký tự trong bảng mã ASCII. Chẳng hạn ta có thể thực hiện câu lệnh chr=65;. Khi đó bản chất là chr sẽ lưu trữ ký tự tương ứng với vị trí 65 trong ASCII. Trong trường hợp này thì chr sẽ lưu ký tự 'A'. Dưới đây là minh họa cho điều này:

C: kiểu char có thể lưu trữ một số nguyên

5. void

Kiểu void không đại diện cho bất kỳ loại giá trị dữ liệu cụ thể nào. Kiểu void không áp dụng cho biến, chỉ áp dụng cho hàm. Khi hàm được định nghĩa với kiểu trả về là void thì tức là hàm đó không trả về bất kỳ giá trị nào.

III. Danh sách kiểu dữ liệu

Bốn kiểu dữ liệu (int, float, double và char) 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 lưu trữ khác nhau. 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 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 các bổ từ. Dưới đây là những giải thích chi tiết về các bổ từ này.

1. 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.

Ta xem những câu lệnh của mã C cung cấp ở bên dưới, nó khai báo một biến theo kiểu unsigned int và khởi tạo biến này có giá trị 33123.

unsigned int varNum;
varNum = 33123;

Chú ý rằng không gian cấp phát cho kiểu biến này vẫn giữ nguyên. Nghĩa là, biến varNum đượ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 unsigned int hỗ trợ sẽ nằm trong khoảng từ 0 đến 65535, thay vì là từ -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 (signed int).

2. 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 viết ngắn gọn 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) bộ nhớ. Tương tự, kiểu long double của một biến chiếm giữ 128 bit (16 byte) bộ nhớ.

Một biến long int được khai báo như sau:

long int varNum;

Nó cũng có thể được khai báo đơn giản như long varNum. Một số long integer có thể được khai báo như long int hay viết ngắn gọn chỉ là long. Tương tự, ta có short int hay short.

Bảng dưới đây trì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.

Kiểu Dung lượng (bit) Phạm vi
char 8 -128 đến 127
unsigned char 8 0 tới 255
signed char 8 -128 đến 127
int 16 -32.768 đến 32.767
unsigned int 16 0 đến 65.535
signed int 16 giống kiểu int
short int 16 tương tự kiểu int
unsigned short int 16 0 65.535
signed short int 16 tương tự kiểu short int
long int 32 -2^31 (-2.147.483.648) tới 2^31-1 (2.147.483.647)
unsigned long int 32 0 tới 4.294.967.295
signed long int 32 giống kiểu long int
float 32 độ chính xác 6 con số
double 64 độ chính xác tới 10 con số
long double 128 độ chính xác 10 con số
» Tiếp: Hằng (Constant)
« Trước: Từ khoá (Keyword)
Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực
Copied !!!