C/C++ cung cấp nhiều kiểu dữ liệu khác nhau để người dùng lập trình. Một cách phổ biến thì mọi người hay dùng những kiểu dữ liệu như: kiểu int để lưu số nguyên, kiểu char để lưu kí tự, kiểu float để lưu số thực…vv…
Tuy nhiên, tùy vào kiến trúc, nền tảng của một số hệ thống hoặc trình biên dịch mà chúng ta sẽ có những điểm khác nhau sau:
– Các kiểu số nguyên (char, int…) tùy mỗi trình biên dịch mà nó có thể là số có dấu (signed char, signed int) hoặc không dấu (unsigned char, unsigned int), điều này ảnh hưởng đến phạm vi giá trị có thể được lưu trữ.
– Kích thước của biến, trong một số hệ thống máy tính cũ, hoặc trên Arduino Uno…, thì kích thước kiểu int chỉ có 2 byte thay vì 4 byte.
Vậy, khi chuyển đổi code C/C++ từ nền tảng này sang nền tảng khác, hoặc từ môi trường phát triển IDE này sang IDE khác thì người phát triển không chỉ phải chú ý đến kích cỡ dữ liệu mà còn phải hiểu IDE đó cấu hình kiểu dữ liệu như thế nào.
Để giải quyết vấn đề trên, một giải pháp đơn giảng là các bạn có thể sử dụng thư viện stdint.h, thư viện này giúp các bạn lưu trữ và làm việc với dữ liệu một cách rõ ràng ở cấp độ bit.
C type | stdint.h type | Bits | Sign | Range |
char | uint8_t | 8 | Unsigned | 0 .. 255 |
signed char | int8_t | 8 | Signed | -128 .. 127 |
unsigned short | uint16_t | 16 | Unsigned | 0 .. 65,535 |
short | int16_t | 16 | Signed | -32,768 .. 32,767 |
unsigned int | uint32_t | 32 | Unsigned | 0 .. 4,294,967,295 |
int | int32_t | 32 | Signed | -2,147,483,648 .. 2,147,483,647 |
unsigned long long | uint64_t | 64 | Unsigned | 0 .. 18,446,744,073,709,551,615 |
long long | int64_t | 64 | Signed | -9,223,372,036,854,775,808 .. 9,223,372,036,854,775,807 |
Hi vọng bài viết có thể giúp các bạn có 1 thói quen khai báo và sử dụng kiểu dữ liệu mới tốt hơn, có thể hiểu về kiểu dữ liệu để tránh được các lỗi sai cơ bản, và cũng không thấy xa lạ khi tham khảo một file code nào đó mà có các kiểu dữ liệu int8_t, int8_t, uint16_t, int16_t, uint32_t, int32_t…
[HỌC ONLINE: LẬP TRÌNH VI ĐIỀU KHIỂN STM32, VI XỬ LÝ ARM CORTEX – M]
Xem thêm: Tổng hợp các bài hướng dẫn Lập trình vi điều khiển STM32 tại đây.
Thuong Nguyen