[cfe-dev] Inconsistent types used to represent bitwidth
Hartmut Kaiser
hartmut.kaiser at gmail.com
Thu Oct 4 05:30:01 PDT 2007
Chris,
> >>> I'm currently trying to remove some of the warnings spit
> >> out on me by
> >>> the
> >>> VC++ compiler (mostly warnings about possible loss of
> precision) and
> >>> recognized, that the bitwith (size of a type in bits) is
> >> represented
> >>> using different types all over the place: sometimes unsigned,
> >>> sometimes uint32_t and sometimes it's even uint64_t. I
> really would
> >>> like to change that to a more consistent scheme, but need
> >> some advice
> >>> which type to choose.
> >>> Since I
> >>> think we can't expect to get anything terribly large as the
> >> bitwidth
> >>> of a type I'ld say let's go for uint32_t.
> >>
> >> Hi Hartmut,
> >>
> >> We should go with uint64_t in general. There can be large arrays
> >> (for example) on 64-bit targets that need this. For "known little
> >> things" like integer types, uint32_t would be sufficient,
> but it is
> >> probably better to be consistent and use uint64_t for everything.
> >
> > IIUC, the bitwidth is most of the time the number of bits needed to
> > represent the size, i.e. 32 for uint32_t. In this case 64 is the
> > largest number these kind of variables will ever hold, no?
>
> Yes, except that what is the size of "uint32_t[100000000000LL]" ?
sizeof(uint32_t[100000000000LL]) < 2^64,
so the size is representable with 64 bits, which means the corresponding
bitwidth is not even '64', which conveniently fits into a int8_t.
But probably I'm getting something really wrong here.
Regards Hartmut
More information about the cfe-dev
mailing list