INT32,INT,int32_t和INT8和中int8_t的区别(Difference betwe

2019-07-18 17:17发布

我碰到的数据类型来int32_t在C程序最近。 我知道,它存储32位,但不要intint32做?

另外,我想用char中的程序。 我可以使用int8_t呢? 有什么不同?

总结: 什么是INT32,INT,int32_t和INT8和在中int8_t C之间的区别?

Answer 1:

之间int32int32_t ,(同样地之间int8int8_t )的区别很简单:C标准定义int8_tint32_t ,但并没有定义什么叫int8int32 -后者(如果存在的话)可能是从一些其他的头或库(最有可能早于在加入int8_tint32_t在C99)。

平原int是从别人有点不同。 其中int8_tint32_t各自具有指定大小, int可以是任何大小> = 16位。 在不同的时期,无论是16位和32位已经相当普遍(和一个64位实现,这也许应该是64位)。

在另一方面, int是保证存在于C,其中的每一个执行int8_tint32_t不是。 这也可能是值得商榷的,这是否尽管对你很重要。 如果您在小型嵌入式系统和/或旧的编译器使用C,它可能是一个问题。 如果您对桌面/服务器计算机现代编译器主要使用它,它可能不会。

哎呀-错过了对部分char 。 你会使用int8_t如果(且仅当)你要保证在大小正好是8位整数类型,而不是字符的。 如果你想存储的字符,你可能想使用char来代替。 它的大小可以变化(中位数计算),但它保证是只有一个字节。 一个轻微的古怪,但:有没有关于保证普通是否char带符号(和许多编译器可以使任何一个,这取决于编译时的标志)。 如果您需要确保其被符号或无符号,你需要明确指定。



Answer 2:

的_t数据类型的typedef类型在stdint.h头,而int是一个内置的基本数据类型。 这使_t仅当stdint.h存在。 在另一方面INT是保证存在。



Answer 3:

始终牢记“大小”是可变的,如果没有明确规定,所以如果你声明

 int i = 10;

在某些系统中可能导致16位整数被编译器和其他一些可能导致32位整数(或在较新的系统的64位整数)。

在嵌入式环境,这可能在奇怪的结果结束(尤其是在处理存储器映射的I / O或可以是考虑一个简单的阵列的情况),因此,强烈建议指定固定大小的变量。 在传统系统中,你可能会遇到

 typedef short INT16;
 typedef int INT32;
 typedef long INT64; 

从C99开始,设计师补充说,本质上利用了类似的typedef stdint.h头文件。

在基于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为了更好地理解一件坏事。



文章来源: Difference between int32, int, int32_t, int8 and int8_t