int16_t保证签名吗?

时间:2011-01-09 07:16:14

标签: c unsigned signed

int16_t 保证中声明的<stdint.h>类型是否已签名,或者只是假定要签名?我认为它必须签名,但令人惊讶的是我似乎无法找到任何明确提到这一点的确凿证据(即对规范的引用)。

有人可以证实这一点吗?如果可能的话,我非常感谢具体参考规范。

2 个答案:

答案 0 :(得分:6)

n1256 7.18.1p1说:

  

当typedef名称只有不同时   初始的缺席或存在   你是定义的,他们应该表示   相应的签名和未签名   6.2.5中描述的类型;一个   提供其中之一的实施   相应的类型也应提供   另一个。

由于有int16_tuint16_t,因此int16_t已签名。

或者确实是7.18.1.1p1:

  

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

更加明确。

编辑:虽然严格来说,但无法保证int16_t不会保证存在。例如,如果您有CHAR_BIT == 9,则不能有int16_t类型。

答案 1 :(得分:3)

是的,int16_t保证符合ISO规范的两个补码。