C语言中的int到底有多少个字节?

1. 网上一些现有的资料。

http://blog.csdn.net/lyl0625/article/details/7350045 

http://atzishi.blog.163.com/blog/static/210838180201301910533629/

有很多中答案,但是都说不准到底是多少字节。

2. 《C程序设计语言》第2.2节 数据类型及其长度

C语言中只提供了下列几种基本类型数据:

    char 字符型,占用一个字节,可以存放本地字符集中的一个字符。

    int 整型,通常反映了所用机器中整数的最自然的长度。

    float 单精度浮点型

    double 双精度浮点型

    此外,还可以在这些基本的数据类型前面加上一些限定符。short和long两个限定符用与限定整型:

    short int sh;

    long int counter;

    在上述这种类型的声明中,关键字int可以省略。通常很多人也习惯这么做。

    short与long两个限定符的引入可以为我们提供满足实际需要的不同长度的整型数。int通常代表特定机器中整数的自然长度。short类型通常为16位,long类型通常为32位,int类型可以为16位或32位。各编译器可以更具硬件特性自主选择合适的类型长度,但要遵循下列循环限制:short与int类型至少为16位,而long类型至少为32位,并且short类型不得长与int类型,而int类型不得长于long类型。

3. 《C++程序设计语言》附录C.2标准

    标准中把许多重要事项宣布为由实现定义。这也意味着每个实现必须有为该种结构提供一个特定的,定义良好的行为方式,并必须将它写入文档。例如,
    unsigned char c1 = 64; // 有良好定义:char至少有8位,总能保存64
    unsigned char c2 = 1256; // 实现定义的:如果char只有8位就会出现截断
    c1的初始化具有良好的定义,因为一个char至少必须有8位。而对c2初始化的行为就要由实现定义,因为char的确切位数由实现定义。如果char只有8位,那么值1256就会被截断到232(C.6.2.1)。由实现定义的大部分特征都与用与运行程序的硬件特征有关。
    在写程序的时候,通常都需要依赖与某些由实现定义的行为。这种行为是我们为了能在大范围的系统之上有效操作所必须付出的代价。例如,如果所有的char都是8位,而且所有整数都是32位,这个语言就会简单许多。但是,16位和32位的字符也很常见,整数也可能更大而无法放入到32位中。例如,今天的许多计算机都有着超过32G字节的磁盘,表示磁盘地址就需要32位或者64位的整数。

4.C99标准

ISO/IEC1989 或ISO/IEC9899:1999  里面的5.2.4.2.1节里面有说各种int类型的尺寸

Their implementation-defined values shall be equal or greater in magnitude (absolute value) to those shown, with the same sign.
— minimum value for an object of type int 
INT_MIN -32767 // −(215 − 1) 
— maximum value for an object of type int
INT_MAX +32767 // 215 − 1 
— maximum value for an object of type unsigned int 
UINT_MAX 65535 // 216 − 1 
— minimum value for an object of type long int
LONG_MIN -2147483647 // −(231 − 1) 
— maximum value for an object of type long int
LONG_MAX +2147483647 // 231 − 1 
— maximum value for an object of type unsigned long int

ULONG_MAX 4294967295 // 232 − 1

5.总结

标准值规定了:short >= 16 Bytes, long >= 32 Bytes, int >= short && int <= long

原文地址:https://www.cnblogs.com/sj20082663/p/3046875.html