int32,int,int32_t,int8和int8_t之间的区别
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了int32,int,int32_t,int8和int8_t之间的区别相关的知识,希望对你有一定的参考价值。
我最近在一个C程序中遇到了数据类型int32_t
。我知道它存储32位,但int
和int32
不一样吗?
另外,我想在程序中使用char
。我可以使用int8_t
吗?有什么不同?
总结一下:C中的int32,int,int32_t,int8和int8_t有什么区别?
在int32
和int32_t
之间(同样在int8
和int8_t
之间),差异很简单:C标准定义了int8_t
和int32_t
,但没有定义任何名为int8
或int32
的东西 - 后者(如果它们存在的话)可能来自其他一些标题或库(很可能早于在C99中添加int8_t
和int32_t
)。
普通的int
与其他人有很大的不同。 int8_t
和int32_t
每个都有指定的大小,int
可以是任何大小> = 16位。在不同的时间,16位和32位都相当普遍(对于64位实现,它应该是64位)。
另一方面,int
保证存在于C的每个实现中,其中int8_t
和int32_t
不是。尽管如此,这对您是否重要仍有待商榷。如果在小型嵌入式系统和/或较旧的编译器上使用C,则可能存在问题。如果您主要使用桌面/服务器计算机上的现代编译器,它可能不会。
哎呀 - 错过了关于char
的部分。你可以使用int8_t
而不是char,如果(并且只有)你想要一个保证大小恰好是8位的整数类型。如果你想存储字符,你可能想要使用char
。它的大小可以变化(就位数而言)但它保证恰好是一个字节。虽然有点奇怪:无法保证普通的char
是有符号还是无符号(并且许多编译器可以使它成为一个,具体取决于编译时标志)。如果您需要确保其已签名或未签名,则需要明确指定。
_t数据类型是stdint.h头文件中的typedef类型,而int是构建的基本数据类型。这使得_t仅在stdint.h存在时可用。另一方面,int保证存在。
请记住,如果没有明确指定,'size'是可变的,所以如果你声明的话
int i = 10;
在某些系统上,它可能会导致编译器产生16位整数,而在某些系统上则可能导致32位整数(或更新系统上的64位整数)。
在嵌入式环境中,这可能会导致奇怪的结果(特别是在处理内存映射I / O时或者可能考虑简单的数组情况),因此强烈建议指定固定大小的变量。在遗留系统中,您可能会遇到
typedef short INT16;
typedef int INT32;
typedef long INT64;
从C99开始,设计人员添加了stdint.h头文件,该文件基本上利用了类似的typedef。
在基于Windows的系统上,您可能会在stdin.h头文件中看到条目为
typedef signed char int8_t;
typedef signed short int16_t;
typedef signed int int32_t;
typedef unsigned char uint8_t;
对于最小宽度整数或精确宽度整数类型,我认为探索stdint.h以获得更好的理解并不是一件坏事。
以上是关于int32,int,int32_t,int8和int8_t之间的区别的主要内容,如果未能解决你的问题,请参考以下文章