Type to use to represent a byte in ANSI (C89/90) C?

后端 未结 6 1263
一向
一向 2020-11-28 09:46

Is there a standards-complaint method to represent a byte in ANSI (C89/90) C? I know that, most often, a char happens to be a byte, but my understanding is that this is not

6条回答
  •  北荒
    北荒 (楼主)
    2020-11-28 10:20

    char is always a byte , but it's not always an octet. A byte is the smallest addressable unit of memory (in most definitions), an octet is 8-bit unit of memory.

    That is, sizeof(char) is always 1 for all implementations, but CHAR_BIT macro in limits.h defines the size of a byte for a platform and it is not always 8 bit. There are platforms with 16-bit and 32-bit bytes, hence char will take up more bits, but it is still a byte. Since required range for char is at least -127 to 127 (or 0 to 255), it will be at least 8 bit on all platforms.

    ISO/IEC 9899:TC3

    6.5.3.4 The sizeof operator

    1. ...
    2. The sizeof operator yields the size (in bytes) of its operand, which may be an expression or the parenthesized name of a type. [...]
    3. When applied to an operand that has type char, unsigned char, or signed char, (or a qualified version thereof) the result is 1. [...]

    Emphasis mine.

提交回复
热议问题