How to programmatically determine maximum and minimum limit of int data in C?

Ok, I was about to write a comment but it got too long...

Are you allowed to use sizeof?

If true, then there is an easy way to find the max value for any type:

For example, I'll find the maximum value for an integer:

Definition: INT_MAX = (1 << 31) - 1 for 32-bit integer (2^31 - 1)

The previous definition overflows if we use integers to compute int max, so, it has to be adapted properly:

INT_MAX = (1 << 31) - 1
        = ((1 << 30) * 2) - 1
        = ((1 << 30) - 1) * 2 + 2) - 1
        = ((1 << 30) - 1) * 2) + 1

And using sizeof:

INT_MAX = ((1 << (sizeof(int)*8 - 2) - 1) * 2) + 1

You can do the same for any signed/unsigned type by just reading the rules for each type.

Tags:

C