uint32_t vs unsigned int — Which one is better?

If you’re not a systems programmer then it probably doesn’t matter

CMP
2 min readJun 6, 2023

Most C++ programmers are aware of the basic data types and their unsigned counterparts — int vs unsigned int, long vs unsigned long, etc. However, many are unaware of the various fixed-width integers defined in the <cstdint> header, such as uint8_t, uint16_t, uint32_t, and uint64_t. So, what are they and why should anyone use them?

What are they?

Fixed-width integers, as the name implies, are integers with a fixed number of bits. A uint8_t variable has a width of exactly 8 bits, so it can store 1 byte of data, a uint32_t can store 32 bits bits of data, etc. There are signed versions as well, such as int32_t that can be used if the data you are storing could be negative.

Do I need to use them?

Most people would be fine using default data types such as int, but I would strongly suggest that systems programmers utilize fixed-width integers for the following reasons:

  • Portability: A uint32_t is guaranteed to take up exactly 32-bits of space, whereas other types are implementation-specific. In many common systems, unsigned int also takes up 32-bits of space, but other systems may use 64-bits. Therefore, if you require an exact number of bits for your integers no matter what processor architecture your code runs on, then fixed-width is definitely the way to go.

--

--

CMP

Software engineer specializing in operating systems, navigating the intracicies of the C++ language and systems programming.