# Các kiểu dữ liệu

Ở C++ và nhiều ngôn ngữ lập trình ta sẽ bắt gặp các kiểu dữ liệu được biểu diễn ở dạng nhị phân như sau:

Tên dữ liệu Loại dữ liệu Kích cỡ (bytes) Dãy giá trị
int Số nguyên 32 bit 4 -231 đến 231 - 1
short int Số nguyên 16 bit 2 -215 đến -215 - 1
long long Số nguyên 64 bit 8 -263 đến 263 - 1
float Số thực độ chính xác đơn 4 ≈ -3,4 x 1038 đến ≈ 3.4 x 1038
double Số thực độ chính xác kép 8 ≈ -1.7 x 10308 đến ≈ 1.7 x 10308
bool Giá trị đúng/sai 1 true hoặc false (0 hoặc 1)
char Kí tự 1 -27 đến 27 - 1

# Số nguyên

int, short int, long long dùng để lưu số nguyên. Các kiểu dữ liệu này có thể lưu các số nguyên không dấu (lưu các số nguyên không âm), hoặc có dấu (có thể lưu các số nguyên âm).
Để lưu các số nguyên không dấu, ta viết thêm unsigned ở đầu kiểu dữ liệu.
VD:

unsigned int ui;
unsigned long long lli;
unsigned short int si;

Khi lưu các số nguyên có dấu ta không cần viết signed ở đầu kiểu dữ liệu.

# Số thực

float, double dùng để lưu các số thực. 2 cách lưu trữ số này chỉ lưu các số thập phân chính xác một phần: float có thể lưu chính xác đến khoảng 7 số sau dấu chấm phẩn, double gấp đôi: 14 đến 15 số.
Ta không nên so sánh 2 số thực bằng kí tự ==. Nếu ta chạy:

if(0.1 + 0.2 == 0.3){
	cout << "True";
} else cout << "False";

Thì nó sẽ in False thay vì True.
Các bài tập yêu cầu in số thực sẽ chấp nhận kết quả chương trình của bạn nếu chệnh lệnh của đáp án của bạn và đáp án của bài nằm trong khoảng yêu cầu ví dụ như 109.

  • Nếu output là x và đáp án của test là y thì chênh lênh sẽ là |x-y|. Các biến số thực vẫn có thể lưu chính xác nếu nó được yêu cầu lưu các số nguyên.

# Boolean

bool dùng để lưu 2 giá trị True/False (1/0).
Bool lại dùng đến 8 bit để lưu true/false trong khi có thể dùng 1 bit để làm điều tương tự. Ta có thể dùng bitset để có thể tối ưu bộ nhớ.

# Kí tự

char lưu kí tự theo bộ mã ASCII.
Ta có thể chuyển từ kí tự sang số bằng cách dùng câu lệnh int([kí_tự]), hoặc chuyển một số sang một kí tự bằng char([mã số]).
Mã số của các kí tự quen thuộc trong ASCII:

  • Mã số của các kí tự từ 1 đến 10 là từ 48 đến 57.
  • Mã số của các kí tự từ a đến z là từ 97 đến 122.
  • Mã số của các kí tự từ A đến Z là từ 65 đến 90.
  • Ta có thể chuyển từ kí tự in thường sang in hoa và ngược lại bằng cách trừ hoặc cộng 32.

# Xâu kí tự

string là một chuối kí tự chứa các giá trị char.