uint16_t和64位处理器的unsigned short int之间有什么区别?

时间:2013-07-17 07:13:13

标签: c linux

我开始使用uint16_t类型的变量,但由于项目限制,我无法使用该数据类型。可以unsigned short int代替uint16_t吗? 我不知道他们俩之间的区别。有人可以澄清一下吗?

2 个答案:

答案 0 :(得分:42)

uint16_t是无符号的16位整数。

unsigned short int是无符号短整数,但大小取决于实现。该标准仅表示它至少为16位(即UINT_MAX的最小值为65535)。在实践中,它通常是16位,但你不能保证这一点。

注意:

  1. 如果您想要一个可移植的无符号16位整数,请使用uint16_t
  2. inttypes.hstdint.h都在C99中引入。如果您使用的是C89,请定义您自己的类型。
  3. uint16_t可能未在某些实施中提供(请参阅下面的参考资料),但unsigned short int始终可用。
  4. 参考: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