Is int in C Always 32-bit?

后端 未结 8 2011
故里飘歌
故里飘歌 2020-12-05 05:17

This is related to following question,

How to Declare a 32-bit Integer in C

Several people mentioned int is always 32-bit on most platforms. I am curious if

8条回答
  •  不思量自难忘°
    2020-12-05 05:33

    "is always 32-bit on most platforms" - what's wrong with that snippet? :-)

    The C standard does not mandate the sizes of many of its integral types. It does mandate relative sizes, for example, sizeof(int) >= sizeof(short) and so on. It also mandates minimum ranges but allows for multiple encoding schemes (two's complement, ones' complement, and sign/magnitude).

    If you want a specific sized variable, you need to use one suitable for the platform you're running on, such as the use of #ifdef's, something like:

    #ifdef LONG_IS_32BITS
        typedef long int32;
    #else
        #ifdef INT_IS_32BITS
            typedef int int32;
        #else
            #error No 32-bit data type available
        #endif
    #endif
    

    Alternatively, C99 and above allows for exact width integer types intN_t and uintN_t:


    1. The typedef name intN_t designates a signed integer type with width N, no padding bits, and a two's complement representation. Thus, int8_t denotes a signed integer type with a width of exactly 8 bits.
    2. The typedef name uintN_t designates an unsigned integer type with width N. Thus, uint24_t denotes an unsigned integer type with a width of exactly 24 bits.
    3. These types are optional. However, if an implementation provides integer types with widths of 8, 16, 32, or 64 bits, no padding bits, and (for the signed types) that have a two's complement representation, it shall define the corresponding typedef names.

提交回复
热议问题