4

声明的int16_t类型是<stdint.h> 保证被签名的,还是应该被签名的?我会假设它必须签名,但令人惊讶的是,我似乎找不到任何明确提到这一点的确凿证据(即对规范的引用)。

有人可以证实这一点吗?如果可能的话,我真的很感激对规范的具体参考。

4

2 回答 2

7

n1256 7.18.1p1 说:

当 typedef 名称仅在初始 u 不存在或存在时有所不同时,它们应表示相应的有符号和无符号类型,如 6.2.5 所述;提供这些对应类型之一的实现也应提供另一个。

由于存在int16_tuint16_tint16_t因此 是有符号的。

或者确实是 7.18.1.1p1:

typedef 名称 intN_t 指定宽度为 N 的有符号整数类型,没有填充位,并且是二进制补码表示。因此,int8_t 表示宽度正好为 8 位的有符号整数类型。

这是更明确的。

编辑:虽然严格来说, int16_t 不能保证被签名,因为它不能保证存在。例如,如果您有 CHAR_BIT==9,则不能有int16_t类型。

于 2011-01-09T07:23:42.367 回答
4

是的,int16_t 保证由 ISO 规范签署二进制补码。

于 2011-01-09T07:22:19.953 回答