'Tis a bit of a waste of cpu time there.

On a two's complement system, which is probably all you'll come by, you
can find UINT_MAX by setting an unsigned integer to -1:

    unsigned int i_max = -1;

A slightly more architecturally independent way of finding UINT_MAX
would be to set an unsigned integer to the complement of its zero:

    unsigned int i_max = ~(unsigned int)0;

Either way, you can find the positive signed maximum by dividing your
result by two (discarding the remainder).

Try the following:

    #include <limits.h>
    #include <assert.h>

    ...
    assert ((unsigned int)-1 == UINT_MAX);
    assert (~(unsigned int)0 == UINT_MAX);

    assert (((unsigned int)-1)/2 == INT_MAX);
    assert ((~(unsigned int)0)/2 == INT_MAX);
    ...

Some may argue against this method, but using an unsigned complement of
zero should hold at least the portability of assuming NULL to be false.

The *_MAX macros, of course, should still be used whenever possible.

ari


[EMAIL PROTECTED] said this stuff:

> Write a simple C program to ++ an int or long variable and see when it overflows.
> 
> > -----Original Message-----
> > From: [EMAIL PROTECTED]
> > [mailto:[EMAIL PROTECTED] Behalf Of ext 
> > Tim Kientzle
> > Sent: Friday, November 21, 2003 12:24 AM
> > To: Jay Sern Liew
> > Cc: [EMAIL PROTECTED]
> > Subject: Re: integer and long max/min values
> > 
> > 
> > Jay Sern Liew wrote:
> > > how do I find out the maximum (and minimum) value a long 
> > and int will hold
> > > in C? (before it overflows or underflows)
> > 
> > #include <limits.h>
> > 
> > INT_MAX and INT_MIN  are the max/min values for an int
> > LONG_MAX and LONG_MIN are the max/min values for long.
> > 
> > Also, see stdint.h, which is defined in C99.
> > 
> > Also, buy a good C reference book.  ;-)
> > 
> > Tim Kientzle
> > 
> > _______________________________________________
> > [EMAIL PROTECTED] mailing list
> > http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
> > To unsubscribe, send any mail to 
> > "[EMAIL PROTECTED]"
> > 
> _______________________________________________
> [EMAIL PROTECTED] mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
> To unsubscribe, send any mail to "[EMAIL PROTECTED]"
_______________________________________________
[EMAIL PROTECTED] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to