简单C数据类型

简单C数据类型,c,types,primitive-types,C,Types,Primitive Types,可能重复: 我很困惑。我想。。。(如果我错了,请纠正我) 那么int\u fast8\t是什么意思内部快捷键int至少8\u t?I写入,其中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 i

可能重复:

我很困惑。我想。。。(如果我错了,请纠正我)


那么
int\u fast8\t
是什么意思<代码>内部快捷键
int至少8\u t

I写入,其中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在中所述:

假设您有一个36位系统的C编译器,
char
=9 位,
short
=18位,
int
=36位,
long
=72位。然后

  • int8\u t
    不存在,因为无法满足正好有8个值位且没有填充的约束
  • int至少是8\t
    char
    的类型定义。不是
    short
    int
    ,因为标准要求最小的类型至少有8个字符 点点滴滴
  • int\u fast8\t
    可以是任何东西。如果“本机”大小被认为是“快速”的,则可能是
    int
    的typedef

如果您使用的是
Linux
,那么大多数都是在
/usr/include/Linux/coda.h
中定义的。e、 g

#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  


I写入,其中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在中所述:

假设您有一个36位系统的C编译器,
char
=9 位,
short
=18位,
int
=36位,
long
=72位。然后

  • int8\u t
    不存在,因为无法满足正好有8个值位且没有填充的约束
  • int至少是8\t
    char
    的类型定义。不是
    short
    int
    ,因为标准要求最小的类型至少有8个字符 点点滴滴
  • int\u fast8\t
    可以是任何东西。如果“本机”大小被认为是“快速”的,则可能是
    int
    的typedef

如果您使用的是
Linux
,那么大多数都是在
/usr/include/Linux/coda.h
中定义的。e、 g

#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  


这些都在C99标准(第7.18节)中规定

[u]intN\t
类型是通用类型(在ISO C标准中),其中
N
表示位宽度(8、16等)。8位不一定是
short
char
,因为short/ints/longs/etc被定义为具有最小范围(而不是比特宽度),并且不可能是2的补码

这些较新的类型是二的补码,而不考虑更常见类型的编码,这些类型可能是一的补码或符号/幅度(参见和)

fast
least
正是它们听起来的样子,fast最小宽度类型和至少给定宽度的类型


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

这些都在C99标准(第7.18节)中规定

[u]intN\t
类型是通用类型(在ISO C标准中),其中
N
表示位宽度(8、16等)。8位不一定是
short
char
,因为short/ints/longs/etc被定义为具有最小范围(而不是比特宽度),并且不可能是2的补码

这些较新的类型是二的补码,而不考虑更常见类型的编码,这些类型可能是一的补码或符号/幅度(参见和)

fast
least
正是它们听起来的样子,fast最小宽度类型和至少给定宽度的类型


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

检查:检查:在Linux系统中,我没有找到
int\u fastN\t
。为什么会这样?我使用
/usr/include$grep'int_fastN_t'*-R
@Grijesh进行搜索,没有
blahN_t
类型,
N
在标准中是8、16等的占位符。搜索
int\u fast8\u t
——它们应该在一起(并从
inttypes.h
引用)。是的,
int\u fast8\u t
存在,但在
stdint.h
中……在我的系统声明中位于
coda.h
!-谢谢paxdiablo:)投票支持你对不起,我的坏,
stdint
保存类型,
inttypes
保存
printf/scanf
的格式说明符。我看到了。但是我得到了我的答案。。谢谢:)在Linux系统中,我没有找到
intfastn\t
。为什么会这样?我使用
/usr/include$grep'int_fastN_t'*-R
@Grijesh进行搜索,没有
blahN_t
类型,
N
在标准中是8、16等的占位符。搜索
int\u fast8\u t
——它们应该在一起(并从
inttypes.h
引用)。是的,
int\u fast8\u t
存在,但在
stdint.h
中……在我的系统声明中位于
coda.h
!-谢谢paxdiablo:)投票支持你对不起,我的坏,
stdint
保存类型,
inttypes
保存
printf/scanf
的格式说明符。我看到了。但我得到了我的答案。谢谢:)