Bỏ qua để đến nội dung

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

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;
}

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!
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;
char letter = 'A'; // Một ký tự, dùng dấu nháy đơn
std::cout << letter << std::endl;

Chi tiết về char sẽ được trình bày ở bài riêng.

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;
}
  • Dùng int cho số nguyên trong đa số trường hợp
  • Dùng double cho số thực (chính xác hơn float, và là mặc định của các phép tính dấu phẩy động trong C++)
  • Chỉ dùng long long khi 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 unsigned trừ khi thực sự cần, vì dễ gây lỗi tràn số khó phát hiện
  • 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 int cho số nguyên và double cho số thực