【发布时间】:2011-12-22 21:27:36
【问题描述】:
我想计算两个整数的绝对差。天真地,这只是abs(a - b)。但是,这有几个问题,具体取决于整数是有符号还是无符号:
对于无符号整数,如果
b大于a,a - b将是一个很大的正数,而绝对值运算无法解决这个问题。对于有符号整数,
a - b可能超出可表示为有符号整数的值范围,从而导致未定义的行为。 (显然,这意味着结果需要是一个无符号整数。)
如何有效地解决这些问题?
我想要一个算法(或一对算法)同时适用于有符号和无符号整数,并且不依赖于将值转换为更大的整数大小。
(另外,澄清一下:我的问题不是如何在代码中编写它,而是我应该写什么以保证溢出安全性。计算 abs(a - b) 作为有符号值,然后转换为无符号值不起作用,因为有符号整数溢出通常是未定义的操作,至少在 C 中是这样。)
【问题讨论】:
标签: algorithm integer overflow