(c语言)整型数据的溢出

Python05

(c语言)整型数据的溢出,第1张

其实这个问题很简单的,这个可能和你编译器环境有关,int 类型表示范围是-32768-32767。所以你可以把它的表示范围比作一个圆。因为在电脑中负数是按补码保存的,所以加1之后会出现进位。如果是char 类型表示-128-127的话,那么char a = 128也会变成-128的。

你可以看一下下面的图,这个圆就好比表示的范围。如果不信的话你可以将int a = 32769试试的,输出应该会变成-32787

从C语言的内部处理机制来说,int型数超出范围(溢出)被认为是一个正常现象,只会产生错误的计算结果或逻辑错误,而不会触发数据溢出的异常。因此,为了避免因为整数溢出而产生程序逻辑或计算错误,程序员必须自行检测可能出现的溢出或者确保不会出现数据溢出的情况。

C语言对于int类型数据超出范围的处理,只有一个最简单的原则:截断处理,即超出int位长度范围的高字节被自动截掉。

比如,假设int长度为16位的情况下,以下代码:

int

a=0X77FFFFL

/*

由于超出范围,高位的77将被自动截掉,实际的a将会等于0xFFFF

*/

++a

/*

a自增后,将超出范围,高位的1被截掉,实际a=0

*/