bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [bug-gnulib] proposed simplification rewrite of stdint module


From: Bruno Haible
Subject: Re: [bug-gnulib] proposed simplification rewrite of stdint module
Date: Fri, 30 Jun 2006 14:34:49 +0200
User-agent: KMail/1.9.1

Paul Eggert wrote:
> >      : ((((zero) + 1) << ((bits) ? (bits) - 1 : 0)) - 1) * 2 + 1)
> 
> Hmm, that's not quite right either, surely you meant (bits) - 2.

No, it appears correct as it is. For example, if bits==32, it will be
       ((1U << 31) - 1) * 2 + 1)
     = (0x7fffffffU * 2 + 1)
     = 0xffffffffU

> But I now thought of a simpler definition.  _STDINT_MAX needs only
> two arguments, and can be simplified to:
> 
> /* _STDINT_MAX relies on the signedness of 'zero' to return the
>    correct type.  */
> #define _STDINT_MAX(bits, zero) (~ _STDINT_MIN (1, bits, zero))

Are you sure this will work for bits < 32? For example, for bits==16
it will evaluate to 0xffffffffU, not 0xffffU.

> OK, I'll change it to this, which follows the advice you gave:
> 
>    #define int_fast8_t long int
>    #define uint_fast8_t unsigned int_fast8_t
>    #define int_fast16_t long int
>    #define uint_fast16_t unsigned int_fast16_t
>    #define int_fast32_t long int
>    #define uint_fast32_t unsigned int_fast32_t

Thanks. That should be fine on all systems.

Bruno




reply via email to

[Prev in Thread] Current Thread [Next in Thread]