繁体   English   中英

uint8_t-8位保证

[英]uint8_t - 8 bits guarantee

如何以及在哪里保证uint8_t为8位?

深入研究N3242-“ C ++编程语言标准工作草案”,第18.4.1节<cstdint>内容提要-

       `typedef unsigned integer type uint8_t; // optional`

因此,从本质上讲,完全不需要C ++标准的库来定义uint8_t

更新:可能只是在问,标准的哪一行说uintN_t类型是N位?

从C ++:

18.4.1标头简介

...标头定义与C标准中的7.18相同的所有函数,类型和宏。 ...

从C:

7.20.1.1精确宽度整数类型

1 typedef名称intN_t指定一个带符号的整数类型,其宽度为N,没有填充位,并且用二进制补码表示。 因此,int8_t表示这样的带符号整数类型,其宽度恰好为8位。

2 typedef名称uintN_t指定宽度为N并且没有填充位的无符号整数类型。 因此,uint24_t表示这种无符号整数类型,其宽度恰好为24位。

3这些类型是可选的。 但是,如果实现提供的整数类型的宽度为8、16、32或64位,没有填充位,并且(对于带符号的类型)具有二进制补码表示,则它应定义相应的typedef名称。


因此,从本质上讲,完全不需要C ++标准的库来定义uint8_t。

正确。 正如Nikos提到的(+1),当/如果不存在/未声明typedef ,您只需要一个替代方法。

<stdint.h>类型是参考C99标准定义的。

C99 N869草案7.17.1.1/2
_t designates an unsigned integer type with width . “ typedef名称uint _t指定宽度为的无符号整数类型。 因此, uint24_t表示宽度为24位的无符号整数类型。”

如果类型由<stdint.h>定义,则其关联的宏也是如此,并且如果未定义该类型,则其关联的宏也不会由C99§7.18/ 4定义。

因此,可以使用是否存在宏UINT8_MAX (由C99§7.18.2.1要求)来检查是否存在uint8_t类型定义。

uint8_t保证为8位宽。 如果它不存在,那么显然您将无法使用它。 但是,如果有,那是8位。 没有提供它的可能性,但是它不是8位的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM