See also: Exotic architectures the standard committee cares about.
Int may be as small as 16-bits on some platforms. It may not be sufficient for your application. Uint32_t is not guaranteed to exist.It's an optional typedef that the implementation must provide iff it has an unsigned integer type of exactly 32-bit.
Some have a 9-bit bytes for example, so they don't have a uint32_t. Uint_fast32_t states your intent clearly: it's a type of at least 32 bits which is the best from performance point-of-view. Uint_fast32_t may be in fact 64 bit long.
It's up to the implementation. See also: Exotic architectures the standard committee cares about.... there is uint_fast32_t which has the same typedef as uint32_t ... What you are looking at is not the standard.It's a particular implementation (BlackBerry). So you can't deduce from there that uint_fast32_t is always the same as uint32_t.
3 Good answer. For completeness, one could maybe point out the difference to uint_least32_t too, which is the same as uint_fast32_t except it favours smaller store rather than speed. – Damon Dec 14 at 11:14.
The difference lies in their exact-ness and availability. The doc here says: unsigned integer type with width of exactly 8, 16, 32 and 64 bits respectively (provided only if the implementation directly supports the type): uint8_t uint16_t uint32_t uint64_t And fastest unsigned unsigned integer type with width of at least 8, 16, 32 and 64 bits respectively uint_fast8_t uint_fast16_t uint_fast32_t uint_fast64_t So the difference is pretty much clear that uint32_t is a type which has exactly 32 bits, and an implementation should provide it only if it has type with exactly 32 bits, and then it can typedef that type as uint32_t. This means, uint32_t may or may not be available.
On the other hand, uint_fast32_t is a type which has at least 32 bits, which also means, if an implementation may typedef uint32_t as uint_fast32_t if it provides uint32_t. If it doesn't provide uint32_t, then uint_fast32_t could be a typedef of any type which has at least 32 bits.
When you #include inttypes. H in your program, you get access to a bunch of different ways for representing integers. The uint_fast*_t type simply defines the fastest type for representing a given number of bits.
Think about it this way: you define a variable of type short and use it several times in the program, which is totally valid. However, the system you're working on might work more quickly with values of type int. By defining a variable as type uint_fast*t, the computer simply chooses the most efficient representation that it can work with.
If there is no difference between these representations, then the system chooses whichever one it wants, and uses it consistently throughout.
1 Why inttypes. H and not stdint. H?
It seems that inttypes. H only contains various mildly useful fluff, plus an include of stdint. H?
– Lundin Dec 14 at 8:57.
I cant really gove you an answer,but what I can give you is a way to a solution, that is you have to find the anglde that you relate to or peaks your interest. A good paper is one that people get drawn into because it reaches them ln some way.As for me WW11 to me, I think of the holocaust and the effect it had on the survivors, their families and those who stood by and did nothing until it was too late.