我正在尝试用 C++ 编写一个函数,该函数采用两个 64 位无符号整数并以有符号 64 位整数返回它们的差异。由于溢出情况,这似乎有点复杂 - 由于输入是两个无符号正整数,如果这两个之间的绝对差大于最大有符号值(INT64_MAX),则该差不能通过有符号整数传输。所以我写了下面的实现,我想知道,首先,这在功能上是否正确,其次,是否有更简单的实现。任何建议将不胜感激。谢谢!(我将用异常替换断言,它现在就在那里!)
int64_t GetDifference(uint64_t first, uint64_t second) {
uint64_t abs_diff = (first > second) ? (first - second): (second - first);
uint64_t msb_abs_diff = (abs_diff >> (sizeof(abs_diff)*8 - 1)) & 1;
assert(msb_abs_diff == 0);
int64_t diff = first - second;
return diff;
}