我想使用类型为uint16_t
的变量,但由于项目限制无法使用该数据类型。是否可以使用unsigned short int
代替uint16_t
?我不知道它们之间的区别,请有经验的人解释一下。
我想使用类型为uint16_t
的变量,但由于项目限制无法使用该数据类型。是否可以使用unsigned short int
代替uint16_t
?我不知道它们之间的区别,请有经验的人解释一下。
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名称,也不得定义相关的宏。实现应提供那些被描述为“必需”的类型,但不需要提供任何其他类型(描述为“可选”)。
short int
大于16位且CHAR_BIT
为8(几乎总是如此),那么根据我所知,定义uint16_t
将会是不可能的。 - mtvec__uint16_t
的扩展,而 stdint.h
可能包含 typedef __uint16_t uint16_t
。 - glglgluint16_t
是保证为一个无符号的、占16位的整数。
unsigned short int
保证为一个无符号的short integer
,而short integer
则由你所使用的编译器(以及可能的编译器标志)定义。对于大多数x86硬件的编译器来说,short 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