C++ std::int_fast#_t và std::int_least#_t

E đang mới học C++, nhưng đến cái bài có std::int_fast#_t std::int_least32_t làm e chưa hiểu cho lắm.

Theo e hiểu qua loa, mấy cái này sẽ đưa cho một type integer thích hợp tùy vào cấu trúc của CPU? (32 bit hoặc 64bit)

Mong có bác nào có cách giải thích dễ hiểu cho gà mờ như e ạ.

E có lên xem mấy cái bài ở stackoverflow nhưng họ nói sâu xa, nên hơi quá tầm với e.

Cảm ơn các bác!

1 Like

các máy tính hiện đại, 1 byte = 8 bits
nhưng các máy tính xưa hoặc các máy tính đặc thù, 1 byte có khi 10 bits, 7 bits.
-> 4 bytes máy hiện đại là 32 bit, nhưng máy xưa có khi là 40 bits, 28 bits.

thì khi này nếu xài int32_t = yêu cầu đúng 32bit thì trên máy tính bây giờ mọi thứ sẽ như bình thường. nhưng nếu đưa vô máy tính khác, 4 byte = 40 bits. thì khi này int32_t sẽ không hiểu được.

khi đó nếu xài int_least32_t thì nó sẽ hiểu rằng kiểu int này cần 4 bytes, nhưng system này 4 bytes = 40bits nên sẽ lấy 40 bits để biểu diễn

tại sao int32_t không hoạt động được do máy tính phải luôn dựa vào thanh ghi. việc đọc/ghi 8bit với 1 thanh ghi 10 bit khá phức tạp nên các compiler sẽ không làm điều này.

2 Likes

Cảm ơn bác ạ.
Thế còn std::int_fast#_t thì sao ạ? Nó khác gì so với least ạ.

E đọc thì hiểu nôm na là ntn:
VD: int_fast64_t thì máy tính sẽ lấy data type với least 64 bit để thực hiện tính toán nhanh và tốt nhất?

E vẫn chưa hình dùng được cho lắm, vì đọc Tiếng Anh :confounded:

.
.
.
P/S: Giờ mới để ý cái bài ở trên em ghi sai

1 Like

đúng, thường là sẽ lấy nguyên thanh ghi hoặc nửa thanh ghi. như x86-64 kiểu 64bit thì sẽ là nguyên thanh ghi RAX, 32 bit thì là EAX.

nhưng nếu kiến trúc không hỗ trợ như x86, 64bit phải xài 2 thanh ghi là EAX:EDX ghép lại thì khi này tốc độ cũng không tối ưu nếu so với uint64_t thường.

với fast, nó sẽ luôn tìm cách lưu trữ sao cho khi tính toán là nhanh nhất có thể.

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?