Kích thước các kiểu dữ liệu cơ bản trong C/C++ (int, long, v.v.) phụ thuộc vào trình biên dịch và kiến trúc (32-bit hay 64-bit). Để đảm bảo độ rộng chính xác, C99/C++11 cung cấp các kiểu kích thước cố định trong header <cstdint> (C++) hoặc <stdint.h> (C).
Các kiểu phổ biến
| Kiểu | Ý nghĩa | Độ rộng |
|---|---|---|
int8_t | Số nguyên có dấu 8-bit | -128 đến 127 |
uint8_t | Số nguyên không dấu 8-bit | 0 đến 255 |
int16_t | Số nguyên có dấu 16-bit | -32,768 đến 32,767 |
uint16_t | Số nguyên không dấu 16-bit | 0 đến 65,535 |
int32_t | Số nguyên có dấu 32-bit | -2,147,483,648 đến 2,147,483,647 |
uint32_t | Số nguyên không dấu 32-bit | 0 đến 4,294,967,295 |
int64_t | Số nguyên có dấu 64-bit | -9.22e18 đến 9.22e18 |
uint64_t | Số nguyên không dấu 64-bit | 0 đến 1.84e19 |
Ví dụ code C++
#include <iostream>
#include <cstdint> // Header bắt buộc
using namespace std;
int main() {
uint8_t i; // Chắc chắn 8-bit unsigned
i = 0;
cout << "Giá trị nhỏ nhất: " << (int)i << endl; // 0
i = 255;
cout << "Giá trị lớn nhất: " << (int)i << endl; // 255
// Vượt quá phạm vi → tràn số (wrap around)
i = 2436; // 2436 % 256 = 132
cout << "Giá trị vượt phạm vi: " << (int)i << endl; // 132
// Các macro hữu ích
cout << "INT32_MAX = " << INT32_MAX << endl;
cout << "UINT16_MAX = " << UINT16_MAX << endl;
return 0;
}
Đầu ra
Giá trị nhỏ nhất: 0 Giá trị lớn nhất: 255 Giá trị vượt phạm vi: 132
Khi nào nên dùng?
- Lập trình nhúng, driver phần cứng, giao thức mạng (cần kích thước chính xác).
- Lưu trữ dữ liệu nhị phân cross-platform.
- Tối ưu bộ nhớ khi biết trước phạm vi giá trị.
Lưu ý
Các kiểu intN_t là optional (trình biên dịch không bắt buộc cung cấp), nhưng hầu hết compiler hiện đại (GCC, Clang, MSVC) đều hỗ trợ đầy đủ.