在C语言中,由于无符号数不存在溢出一说,所以溢出都是对有符号数来说的。
如果你想利用 if( a + b < 0 ) 语句来判断溢出的话,那么他就会存在局限性,因为每种编译器的实现不同。
判断是否溢出的方法之一就是都转化为无符号数,然后判断其与C语言中最大值的大小。
一种方法如下:
if ( (unsigned)a + (unsigned)b > INT_MAX )
//报错
其中,INT_MAX是C语言中自带的一个常量,在头文件<limits.h>中。
另外一种方法如下:
if( a > INT_MAX - b)
//报错
这个跟上面的其实差不多,只是没有利用转化来比较。
可能很多人会认为为什么我在写代码的时候会出现溢出呢,或者有很多考试或者编程中出现了溢出呢?
在这里,需要大家知道的就是C语言中,当你定义了int的时候,默认的是signed类型的,所以会出现这种情况。