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

Đăng ký nhận cảnh báo về những video tiên tiến nhất

Danh mục nội dung:

Ι. Khái quát

₵ phân tách 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 tích bộ nhớ lưu trữ sẽ khác nhau. Dung tích bộ nhớ lưu trữ được chỉ định cho một biến tùy theo vào kiểu dữ liệu của nó. Ðể chỉ định bộ nhớ lưu trữ cho một nhà cung cấp dữ liệu, tất cả chúng ta phải khai báo một biến với một kiểu dữ liệu rõ ràng và 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ớ lưu trữ đó sau này sẽ được tham chiếu thông qua tên của biến. Dung tích bộ nhớ lưu trữ được cấp cho biến bởi HĐH lệ thuộc vào kiểu dữ liệu được lưu trữ trong biến. Chính vì như thế, một kiểu dữ liệu sẽ miêu tả loại dữ liệu phù 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 dụng cụ lập trình có thể được phân tách 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 miêu tả.

Những kiểu dữ liệu này có thể có tên khác nhau trong các từ ngữ lập trình khác nhau. Chẳng hạn, một kiểu dữ liệu số được gọi trong từ ngữ ₵int, trong lúc đó tại Visual Basic được gọi là integer. Tương đương, một kiểu dữ liệu ký tự được đặt tên là char trong ₵ trong lúc đó trong Visual Basic nó được đặt tên là string. Trong bất kể 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 đặc biệt là các biến được dùng trong một dụng cụ phải được khai báo theo tên của kiểu dữ liệu được suport bởi chính dụng cụ đó.

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

₵ có 5 kiểu dữ liệu căn bản. Toàn bộ những kiểu dữ liệu khác đều dựa trên những kiểu này. Dưới đây sẽ trình bày các kiểu dữ liệu mà ₵ suport.

1. int

Là kiểu dữ liệu lưu trữ số nguyên & là một trong những kiểu dữ liệu căn bản trong bất kể từ 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 ₵, để 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 chẳng thể lưu trữ bất kể kiểu dữ liệu nào như “Long” hay 1.234 ví dụ. 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ĐH cấp phát 16 bit (2 byte) cho một biến đã được khai báo kiếu int. Chẳng hạn: 12322, 0, -232.

Nếu tất cả chúng ta gán giá trị 12322 cho num thì biến đó là biến kiểu số nguyên & 12322 là hằng số nguyên.

Xem Thêm  CSS để đặt biểu tượng bên trong một phần tử đầu vào trong một biểu mẫu - biểu tượng trong css đầu vào

Cảnh báo: Một biến kiểu int còn tồn tại thể lưu trữ một ký tự. Chẳng hạn như biến num có thể lưu trữ một ký tự bất kỳ nào đó, ví dụ num=’?’. Bản chất là biến num sẽ lưu trữ địa điểm tương ứng của ký tự đó trong bảng mã ASCII. Trong trường hợp này ký tự ‘?’ có địa điểm 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.

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 lúc kiểu dữ liệu float có thể giữ lại thêm cả các số thập phân.

Chẳng hạn, trong ₵, để lưu trữ một giá trị float trong một biến cái tên 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ó độ đúng đắn tới 6 con số. Biến này được cấp phát 32 bit (4 byte) bộ nhớ lưu trữ. Chẳng hạn như 23.05, 56.5, 32 là những số mà biến num có thể lưu trữ.

Nếu tất cả chúng ta gán giá trị 23.5 cho flo, thì biến flo là biến số thực & 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ị).

Note là trong ₵ dùng dấu chấm (.) để phân cách giữa phần nguyên & 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á hạn chế về dung tích 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ố đúng đắn mà kiểu dữ liệu float hoặc double có thể lưu trữ tùy theo vào HĐH rõ ràng và cụ thể của dòng sản phẩm tính.

Các con số được lưu trữ trong kiểu dữ liệu float hay double được coi như nhau trong hệ thống tính toán. Không những thế, sử dụng kiểu dữ liệu float tiết kiệm bộ nhớ lưu trữ một nửa đối với kiểu dữ liệu double.

Kiểu dữ liệu double cho phép độ đúng đắn 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ớ lưu trữ.

Thí dụ trong ₵, để 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 tất cả chúng ta gán giá trị 12.34567890 cho biến dou, thì nó là biến kiểu double & 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, chẳng hạn ‘?’, ‘$’, ‘1’, ‘#’, ‘ռ’ (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 cỡ 8 bit = 1 byte.

Xem Thêm  Kế thừa Java (Lớp con và Lớp siêu) - những gì một lớp con kế thừa từ một lớp cha

Không nên lầm lẫn ký tự số với con số. Chẳng hạn như các ký tự ‘1’, ‘4’ & ‘7’ sẽ không được lầm lẫn với những số 1, 4 & 7.

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

char chr;

chr=’?’;

Câu lệnh trước tiên khai báo biến chr có kiểu dữ liệu char. Hàng thứ hai giữ lại một giá trị khởi tạo cho nó là ‘?’. Giờ đây thì biến chr là một biến ký tự & ‘?’ là một hằng ký tự.

Cảnh báo: ta cũng có thể cho biến ký tự lưu một số nguyên là địa điểm tương ứng của ký tự trong bảng mã ASCII. Ví dụ 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 địa điểm 65 trong ASCII. Trong trường hợp này thì chr sẽ lưu ký tự ‘?’. 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 rõ ràng và cụ thể nào. Kiểu void không ứng dụng cho biến, chỉ ứng dụng cho hàm. Khi hàm được khái niệm 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 mục kiểu dữ liệu

Bốn kiểu dữ liệu (int, float, double & char) mà tất cả chúng ta đã bàn bạc ở trên được sử dụng cho việc trình bày dữ liệu thực sự trong bộ nhớ lưu trữ của dòng sản phẩm tính. Những kiểu dữ liệu này có thể được sửa đổi sao cho phù phù hợp với những tình huống khác nhau một cách đúng đắn. Kết quả, tất cả chúng ta có được các kiểu dữ liệu dẫn xuất từ những kiểu căn bản này.

Một bổ từ (modifier) được sử dụng để biến đổi kiểu dữ liệu căn bản nhằm phù phù hợp với các tình huống lưu trữ khác nhau. Loại trừ kiểu void, toàn bộ 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 ₵ là signed, unsigned, long & short. Toàn bộ chúng có thể được ứng dụng cho dữ liệu kiểu ký tự & kiểu số nguyên. Bổ từ long cũng có thể được ứng dụng cho double.

Ðể khai báo một biến kiểu dẫn xuất, tất cả 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 cụ thể về các bổ từ này.

1. Các kiểu có dấu (signed) & không dấu (unsigned)

Khi khai báo một số nguyên, mặc định này là một số nguyên có dấu. Tính trọng yếu 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 & kiểu dữ liệu float. Kiểu unsigned có thể ứng dụng cho kiểu dữ liệu float trong vài trường hợp nhưng điều này giảm thiểu tính khả chuyển (portability) của mã lệnh.

Xem Thêm  Top 100+ Core Java Interview Questions - java finally

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 trưởng gấp đôi.

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

unsigned int varNum;
varNum = 33123;

Cảnh báo 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. Không những thế, những giá trị mà một kiểu unsigned int suport sẽ nằm trong khoảng từ 0 đến 65535, thay vì là từ -32768 tới 32767 mà kiểu int suport. Theo mặc định, int là một kiểu dữ liệu có dấu (signed int).

2. Các kiểu long & short

Chúng được sử dụng khi một số nguyên có bề dài ngắn hơn hoặc dài hơn bề dài bình bình. Một bổ từ short được ứng dụng cho kiểu dữ liệu khi bề dài yêu cầu ngắn hơn bề dài số nguyên bình bình & một bổ từ long được dùng khi bề dài yêu cầu dài hơn bề dài số nguyên bình bình.

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 địa điểm bộ nhớ lưu trữ hơn. Bởi thế, trong lúc 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) & 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 tương tự như kiểu dữ liệu double. Khi được sử dụng với kiểu dữ liệu int, biến đồng ý những giá trị số trong khoảng từ -2.147.483.648 đến 2.147.483.647 & chiếm giữ 32 bit (4 byte) bộ nhớ lưu trữ. Tương tự, kiểu long double của một biến chiếm giữ 128 bit (16 byte) bộ nhớ lưu trữ.

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

long int varNum;

Nó cũng có thể được khai báo dễ dàng 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 đương, 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 & số bit nó chiếm giữ dựa vào tiêu chí ANSI.

Kiểu
Dung tích (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 đương kiểu int

unsigned short int
16
0 65.535

signed short int
16
tương đương 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
độ đúng đắn 6 con số

double
64
độ đúng đắn tới 10 con số

long double
128
độ đúng đắn 10 con số

Viết một bình luận