如何在C语言中安全计算两个有符号整数的绝对差值?
计算两个int变量的绝对差值:避开溢出陷阱
绝对差值指的是两个数差值的绝对值。如果要计算两个int类型变量x和y的绝对差值,不少人会用这个看似简单的写法:
unsigned diff = abs(x-y);
但这个写法存在致命问题:当x-y发生溢出时(比如x取INT_MIN、y取INT_MAX),会触发C语言的未定义行为,最终得到错误结果。就算退一步假设系统采用回绕行为处理溢出,这段代码返回的结果也是1,完全不是我们预期的UINT_MAX。
内容的提问来源于stack exchange,提问作者CPlus
相关产品推荐
相关产品推荐

