可能重复:
The difference of int8_t, int_least8_t and int_fast8_t?
我很困惑。我想......(如果我错了,请纠正我)
u_int8_t = unsigned short ?
u_int16_t = unsigned int ?
u_int32_t = unsigned long ?
u_int64_t = unsigned long long ?
int8_t = short ?
int16_t = int ?
int32_t = long ?
int64_t = long long ?
那么int_fast8_t
是什么意思? int_fastN_t
? int_least8_t
?
答案 0 :(得分:2)
我写的是int是16位的地方:
u_int8_t = unsigned char
u_int16_t = unsigned int
u_int32_t = unsigned long int
u_int64_t = unsigned long long int
int8_t = char
int16_t = int
int32_t = long int
int64_t = long long int
问:“那么int_fast8_t是什么意思?int_fastN_t?int_least8_t?”
正如dan04在his answer here中所述:
假设您有一个36位系统的C编译器,
char
= 9 位,short
= 18位,int
= 36位,long
= 72位。然后
int8_t
不存在,因为没有办法满足完全 8值位而没有填充的约束。int_least8_t
是char
的typedef。不是short
或int
,因为标准要求最小类型至少为8 位。int_fast8_t
可以是任何东西。如果“原生”大小被认为是“快速”,则可能是int
的typedef。
如果您在Linux
,则大多数都在/usr/include/linux/coda.h
中定义。例如
#ifndef __BIT_TYPES_DEFINED__
#define __BIT_TYPES_DEFINED__
typedef signed char int8_t;
typedef unsigned char u_int8_t;
typedef short int16_t;
typedef unsigned short u_int16_t;
typedef int int32_t;
typedef unsigned int u_int32_t;
#endif
并且
#if defined(DJGPP) || defined(__CYGWIN32__)
#ifdef KERNEL
typedef unsigned long u_long;
typedef unsigned int u_int;
typedef unsigned short u_short;
typedef u_long ino_t;
typedef u_long dev_t;
typedef void * caddr_t;
#ifdef DOS
typedef unsigned __int64 u_quad_t;
#else
typedef unsigned long long u_quad_t;
#endif
答案 1 :(得分:2)
这些都在C99标准中规定(第7.18节)。
[u]intN_t
类型是泛型类型(在ISO C标准中),其中N
表示位宽(8,16等)。 8位不一定是short
或char
,因为short / ints / longs / etc被定义为具有最小范围(不是位宽),并且可能不是2的补码
这些较新的类型是两个补码,无论更常见类型的编码如何,可以是补码或符号/幅度(参见Representation of negative numbers in C?和Why is SCHAR_MIN defined as -127 in C99?)
fast
和least
正是它们的声音,快速最小宽度类型和至少给定宽度的类型。
标准还详细说明了哪种类型是必需的,哪些是可选的。