int16_t
保证中声明的<stdint.h>
类型是否已签名,或者只是假定要签名?我认为它必须签名,但令人惊讶的是我似乎无法找到任何明确提到这一点的确凿证据(即对规范的引用)。
有人可以证实这一点吗?如果可能的话,我非常感谢具体参考规范。
答案 0 :(得分:6)
n1256 7.18.1p1说:
当typedef名称只有不同时 初始的缺席或存在 你是定义的,他们应该表示 相应的签名和未签名 6.2.5中描述的类型;一个 提供其中之一的实施 相应的类型也应提供 另一个。
由于有int16_t
和uint16_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规范的两个补码。