简单的C数据类型

时间:2012-12-08 14:03:53

标签: c types primitive-types

  

可能重复:
  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_tint_least8_t

2 个答案:

答案 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_tchar的typedef。不是shortint,因为标准要求最小类型至少为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位不一定是shortchar,因为short / ints / longs / etc被定义为具有最小范围(不是位宽),并且可能不是2的补码

这些较新的类型两个补码,无论更常见类型的编码如何,可以是补码或符号/幅度(参见Representation of negative numbers in C?Why is SCHAR_MIN defined as -127 in C99?

fastleast正是它们的声音,快速最小宽度类型和至少给定宽度的类型。

标准还详细说明了哪种类型是必需的,哪些是可选的。