无符号数相加不会发生溢出。因为会直接截断。但是有符号数相加,会发生溢出。溢出表示大于最大表示了
那么如何判断有符号数发生溢出呢?
下面两个非负数相加
if(a + b < 0)
若a+b发生溢出,那么a+b的结果是不确定的。《C陷阱》,故上述方法不可行
if(a > INT_MAX - b)可行,不计算a+b
或者(unsigned)a + (unsigned)b > INT_MAX
换成无符号,a+b结果就确定了
时间: 2024-10-12 03:22:27
无符号数相加不会发生溢出。因为会直接截断。但是有符号数相加,会发生溢出。溢出表示大于最大表示了
那么如何判断有符号数发生溢出呢?
下面两个非负数相加
if(a + b < 0)
若a+b发生溢出,那么a+b的结果是不确定的。《C陷阱》,故上述方法不可行
if(a > INT_MAX - b)可行,不计算a+b
或者(unsigned)a + (unsigned)b > INT_MAX
换成无符号,a+b结果就确定了