How would you set a variable to the largest number possible in C?

Solution 1:

#include <limits.h>
int x = INT_MAX;

EDIT: answered before the questioner clarified, I was just guessing what type they wanted.

Solution 2:

There is a file called limits.h (at least on Linux there is), which holds this kind of definition e.g.

/* Maximum value an `unsigned short int' can hold.  (Minimum is 0.)  */
#  define USHRT_MAX 65535

/* Minimum and maximum values a `signed int' can hold.  */
#  define INT_MIN   (-INT_MAX - 1)
#  define INT_MAX   2147483647

/* Maximum value an `unsigned int' can hold.  (Minimum is 0.)  */
#  define UINT_MAX  4294967295U

Solution 3:

Another portable way to get maximum value of integer:

Unsigned integer

unsigned int uMax = (unsigned int)~0;

Signed integer

signed int iMax = (unsigned int)~0 >> 1;

Explanation

  • ~0 -> setting all bits to one
  • >> 1 -> erasing sign bit, by shifting all bits to the right by one position
  • (unsigned int) typecasting to unsigned int after bits inversion instead of using ~0U, because C doesn't have a suffix for short,char literals (everything smaller than int in general)

So for biggest possible char value - just change in formula typecasting to unsigned char and etc.

Bonus - minimum value of signed int

Simply just invert all bits once more in max signed int expression:

signed int iMin = ~((unsigned int)~0 >> 1);

That sets first sign bit to one and the rest bits - to zero

Solution 4:

By far the simplest method to get the largest value for an unsigned integer type is to cast (-1) to that type. The standard (§6.2.5/9) requires that unsigned math be carried out modulo a number one greater than the largest value that can be represented, so for any unsigned type T, the expression ((T)-1) will necessarily be the largest value possible in that type.