1、发生条件:
两个无符号整型操作数的算术运算中,无溢出情况;
若一个操作数是有符号整数,另一个为有符号整数,则有符号数会被转换为无符号整数,无溢出情况;
只有当两个操作数是有符号整数时,溢出才会有可能发生,而且溢出的结果是未定义的,作出任何假设都是不安全的。
2、判断是否溢出:
以下的代码并不可靠,
正确的方式1:将a和b都强制转换为无符号整数,
其中INT_MAX是一个定义常量,代表可能的最大整数值,ANSI C标准在<limits.h>中定义了INT_MAX,我们也可以自己重新定义。
正确方法2:不用无符号数
参见《C陷阱与缺陷》3.9 整数溢出