35

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

4

2 回答 2

52

uint16_t是无符号 16 位整数。

unsigned short int是无符号短整数,但大小取决于实现。UINT_MAX该标准只说它至少是 16 位的(即is的最小值65535)。在实践中,它通常是 16 位的,但你不能把它当作保证。

笔记:

  1. 如果您想要一个可移植的无符号 16 位整数,请使用uint16_t.
  2. inttypes.h并且stdint.h都在 C99 中引入。如果您使用的是 C89,请定义您自己的类型。
  3. uint16_t在某些实现中可能未提供(请参阅下面的参考),但unsigned short int始终可用。

参考:C11(ISO/IEC 9899:201x) §7.20整数类型

对于此处描述的实现提供的每种类型)应声明 typedef 名称并定义关联的宏。相反,对于此处描述的实现未提供的每种类型,不应声明该 typedef 名称,也不应定义关联的宏。实现应提供那些描述为“必需”的类型,但不需要提供任何其他类型(描述为“可选”)。

于 2013-07-17T07:15:08.440 回答
21

uint16_t保证为 16 位大的无符号整数

unsigned short int保证为 unsigned short integer,其中short integer由您当前使用的编译器(以及可能的编译器标志)定义。对于大多数 x86 硬件的编译器来说,ashort integer是 16 位大的。

另请注意,根据ANSI C 标准,仅定义了 16 位的最小大小,最大大小取决于编译器的开发人员

最小类型限制

任何符合标准的编译器还必须遵守以下关于任何特定类型可以接受的值范围的限制。请注意,这些是下限:实现可以自由地超过任何或所有这些。另请注意,char 的最小范围取决于 char 是否被视为有符号或无符号。

类型 最小范围

signed char     -127 to +127
unsigned char      0 to 255
short int     -32767 to +32767
unsigned short int 0 to 65535
于 2013-07-17T07:16:37.783 回答