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

在面试的时候被问到这个问题,所以就钻了牛角尖一下,在这把查到的结果记一下。

1、首先,查了一下网上的资料。

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

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。所以,面试的时候如果被问到这个问题,如果没有专门深究过,真的很难回答出来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值