C++: Bài 4. Kiểu dữ liệu
Để lưu trữ các loại thông tin dữ liệu khác nhau thì ta cần sử dụng các biến với những kiểu dữ liệu khác nhau như character, integer, floating point, double floating point, boolean. Mỗi kiểu dữ liệu sẽ được hệ điều hành cấp phát một vùng nhớ khác nhau.
Kiểu dữ liệu nguyên thủy có sẵn
C++ cung cấp cho ta 7 kiểu dữ liệu như sau:
Tên kiểu | Ký hiệu |
---|---|
Boolean | bool |
Character | char |
Integer | int |
Floating point | float |
Double floating point | double |
Valueless | void |
Wide character | wchar_t |
Một số kiểu dữ liệu ở trên lại có thể kết hợp với những bổ từ sau để cho ra các kiểu dữ liệu mới:
- signed
- unsigned
- short
- long
Bảng sau đây thể hiện thông tin chi tiết về các kiểu dữ liệu của C++:
Kiểu | Cấp phát vùng nhớ | Miền giá trị |
---|---|---|
char | 1byte | -127 tới 127 hoặc 0 tới 255 |
unsigned char | 1byte | 0 tới 255 |
signed char | 1byte | -127 tới 127 |
int | 4byte | -2147483648 tới 2147483647 |
unsigned int | 4byte | 0 tới 4294967295 |
signed int | 4byte | -2147483648 tới 2147483647 |
short int | 2byte | -32768 tới 32767 |
unsigned short int | Range | 0 tới 65,535 |
signed short int | Range | -32768 tới 32767 |
long int | 4byte | -2,147,483,648 tới 2,147,483,647 |
signed long int | 4byte | tương tự long int |
unsigned long int | 4byte | 0 tới 4,294,967,295 |
float | 4byte | +/- 3.4e +/- 38 (~7 con số) |
double | 8byte | +/- 1.7e +/- 308 (~15 con số) |
long double | 8byte | +/- 1.7e +/- 308 (~15 con số) |
wchar_t | 2 hoặc 4 byte | 1 wide character |
Kích thước của các biến có thể khác với kích thước được hiển thị trong bảng trên, tùy thuộc vào trình biên dịch và máy tính bạn đang sử dụng.
Sau đây là ví dụ, sẽ tạo ra kích thước chính xác của nhiều loại dữ liệu khác nhau trên máy tính của bạn.
#include <iostream> using namespace std; main() { cout << "Size of char : " << sizeof(char) << endl; cout << "Size of int : " << sizeof(int) << endl; cout << "Size of short int : " << sizeof(short int) << endl; cout << "Size of long int : " << sizeof(long int) << endl; cout << "Size of float : " << sizeof(float) << endl; cout << "Size of double : " << sizeof(double) << endl; cout << "Size of wchar_t : " << sizeof(wchar_t) << endl; return 0; }
Ví dụ trên sử dụng endl
, sẽ chèn một ký tự dòng mới sau mỗi dòng và toán tử <<
đang được sử dụng để chuyển nhiều giá trị ra màn hình. Ở đây ta có sử dụng phương thức sizeof() để lấy kích thước của nhiều kiểu dữ liệu khác nhau.
Khi ví dụ trên được biên dịch và thực thi, nó tạo ra kết quả như sau và có thể khác nhau giữa các máy:
Size of char : 1 Size of int : 4 Size of short int : 2 Size of long int : 4 Size of float : 4 Size of double : 8 Size of wchar_t : 4
Khai báo typedef
Bạn có thể tạo tên mới cho kiểu hiện có bằng typedef
. Sau đây là cú pháp đơn giản để xác định một kiểu mới bằng typedef:
typedef type newname;
Ví dụ, phần sau cho trình biên dịch biết rằng feet là một tên khác của int:
typedef int feet;
Bây giờ, khai báo sau là hoàn toàn hợp lệ:
feet distance; //tạo một biến kiểu int có tên distance
Kiểu enum
Kiểu liệt kê (enum) khai báo tên kiểu tùy chọn và một tập hợp không hoặc nhiều giá trị có thể được sử dụng làm giá trị của kiểu. Mỗi phần tử trong tập hợp là một hằng số có kiểu là kiểu liệt kê.
Để tạo kiểu liệt kê thì ta sử dụng từ khóa enum. Dạng tổng quát của kiểu liệt kê là như sau:
enum enum-name { list of names } var-list;
Ở đây, enum-name là tên kiểu của enum. Danh sách tên được phân tách bằng dấu phẩy.
Ví dụ, đoạn mã sau đây tạo một danh sách các màu gọi là color và biến c có kiểu color. Cuối cùng, c được gán giá trị "blue".
enum color { red, green, blue } c; c = blue;
Theo mặc định, giá trị của tên đầu tiên có chỉ số 0, tên thứ hai có chỉ số là 1, v.v. Nhưng bạn có thể đặt tên, giá trị cụ thể bằng cách thêm bộ khởi tạo. Ví dụ, trong bảng liệt kê sau, màu green sẽ có giá trị 5.
enum color { red, green = 5, blue };
Ở đây, màu blue sẽ có giá trị là 6 vì mỗi tên sẽ lớn hơn một tên đứng trước nó.