整数溢出 众所周知,C语言中存在两种整数运算:有符号运算与无符号运算,在无符号算数运算中,没有所谓的“溢出”一说:所有无符号运算都是以2的n次方为模,这里n是结果中的位数。 如果算数运算符的一个操作数是有符号的整数,另一个是无符号整数,那么有符号整数会被转换为无符号整数,“溢出”也不可能发生。 但是,当两个操作数都是有符号整数时,“溢出”就有可能发生,而且溢出的结果是未定义的。当一个运算的结果发生溢出时,做出任何假设都是不安全的。 当我们检查a+b是否会溢出时,正确的做法: if ((unsigned)a + (unsigned)b > INT_MAX) {