我开始使用uint16_t
类型的变量,但由于项目限制,我无法使用该数据类型。可以unsigned short int
代替uint16_t
吗?
我不知道他们俩之间的区别。有人可以澄清一下吗?
答案 0 :(得分:42)
uint16_t
是无符号的16位整数。
unsigned short int
是无符号短整数,但大小取决于实现。该标准仅表示它至少为16位(即UINT_MAX
的最小值为65535
)。在实践中,它通常是16位,但你不能保证这一点。
注意:
uint16_t
。inttypes.h
和stdint.h
都在C99中引入。如果您使用的是C89,请定义您自己的类型。uint16_t
可能未在某些实施中提供(请参阅下面的参考资料),但unsigned short int
始终可用。参考:C11(ISO / IEC 9899:201x)§7.20整数类型
对于此处描述的实现提供的每种类型,应声明typedef名称并定义关联的宏。相反,对于此处描述的实现未提供的每种类型,不应声明typedef名称,也不应定义关联的宏。实现应提供描述为“必需”的类型,但不需要提供任何其他类型(描述为“可选”)。
答案 1 :(得分:19)
uint16_t
保证是16位大的无符号整数
unsigned short int
保证是无符号short integer
,其中short integer
由您当前使用的编译器(以及可能的编译器标志)定义。对于x86硬件的大多数编译器,short integer
大16位。
另请注意,每the ANSI C standard只定义了16位的最小大小,最大大小取决于编译器的开发人员
最低类型限制
符合标准的任何编译器也必须遵守 遵循任何特定值的范围 类型可以接受。请注意,这些是下限:实现 可以自由地超过任何或所有这些。还要注意最低限度 char的范围取决于是否考虑char 签名或未签名。
输入最小范围
signed char -127 to +127 unsigned char 0 to 255 short int -32767 to +32767 unsigned short int 0 to 65535