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ểuKích thước (thường gặp)Phạm vi giá trị
short2 byte-32,768 đến 32,767
int4 bytekhoảng -2 tỷ đến 2 tỷ
long4 hoặc 8 bytetùy hệ điều hành
long long8 bytekhoả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ểuKích thướcĐộ chính xác
float4 byte~6-7 chữ số thập phân
double8 byte~15-16 chữ số thập phân (mặc định, nên dùng)
long double≥8 byteCao 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