Kiểu dữ liệu số
C++ có nhiều kiểu dữ liệu số với kích thước và phạm vi giá trị khác nhau, giúp lập trình viên tối ưu bộ nhớ.
1. Số nguyên (Integer types)
Phần tiêu đề “1. Số nguyên (Integer types)”| Kiểu | Kích thước (thường gặp) | Phạm vi giá trị |
|---|---|---|
short |
2 byte | -32,768 đến 32,767 |
int |
4 byte | khoảng -2 tỷ đến 2 tỷ |
long |
4 hoặc 8 byte | tùy hệ điều hành |
long long |
8 byte | khoảng ±9.2 × 10^18 |
#include <iostream>
int main() { short s = 100; int i = 100000; long l = 10000000L; long long ll = 10000000000LL; // Hậu tố LL cho số lớn
std::cout << s << " " << i << " " << l << " " << ll << std::endl; return 0;}Số nguyên không dấu (unsigned)
Phần tiêu đề “Số nguyên không dấu (unsigned)”Mỗi kiểu số nguyên đều có phiên bản unsigned - chỉ chứa số không âm, nhưng đổi lại phạm vi dương lớn gấp đôi:
unsigned int u = 4000000000; // int thường không chứa được số này, unsigned int thì được// unsigned int negative = -1; // Nguy hiểm: sẽ "wrap around" thành số rất lớn, không báo lỗi!2. Số thực (Floating-point types)
Phần tiêu đề “2. Số thực (Floating-point types)”| Kiểu | Kích thước | Độ chính xác |
|---|---|---|
float |
4 byte | ~6-7 chữ số thập phân |
double |
8 byte | ~15-16 chữ số thập phân (mặc định, nên dùng) |
long double |
≥8 byte | Cao hơn double (tùy nền tảng) |
float f = 3.14f; // Hậu tố f bắt buộc cho float (nếu không, 3.14 mặc định là double)double d = 3.14159265358979;std::cout << f << " " << d << std::endl;3. Kiểu ký tự (char)
Phần tiêu đề “3. Kiểu ký tự (char)”char letter = 'A'; // Một ký tự, dùng dấu nháy đơnstd::cout << letter << std::endl;Chi tiết về char sẽ được trình bày ở bài riêng.
4. Kiểm tra kích thước kiểu dữ liệu
Phần tiêu đề “4. Kiểm tra kích thước kiểu dữ liệu”Dùng toán tử sizeof để biết một kiểu dữ liệu chiếm bao nhiêu byte trên hệ thống hiện tại:
#include <iostream>
int main() { std::cout << "int: " << sizeof(int) << " bytes" << std::endl; std::cout << "double: " << sizeof(double) << " bytes" << std::endl; std::cout << "char: " << sizeof(char) << " bytes" << std::endl; return 0;}5. Chọn kiểu dữ liệu nào?
Phần tiêu đề “5. Chọn kiểu dữ liệu nào?”- Dùng
intcho số nguyên trong đa số trường hợp - Dùng
doublecho số thực (chính xác hơnfloat, và là mặc định của các phép tính dấu phẩy động trong C++) - Chỉ dùng
long longkhi cần số nguyên rất lớn (ví dụ: tính giai thừa, tổng lớn trong competitive programming) - Tránh dùng
unsignedtrừ khi thực sự cần, vì dễ gây lỗi tràn số khó phát hiện
Tổng kết
Phần tiêu đề “Tổng kết”- C++ có nhiều kiểu số với kích thước cố định:
short,int,long,long long,float,double - Mỗi kiểu số nguyên có phạm vi giá trị giới hạn - vượt quá phạm vi sẽ gây tràn số (overflow) mà không báo lỗi
- Dùng
sizeof()để kiểm tra kích thước một kiểu dữ liệu trên hệ thống hiện tại - Mặc định nên dùng
intcho số nguyên vàdoublecho số thực